从 Variant String 转换为 Double 会忽略小数点
Cast from Variant String to Double ignores decimal point
我有几行简单的代码:
var
vRecordValue:Double;
begin
vRecordValue:= someVariant;
其中 someVariant 是一个字符串(类型 256)。
在生产系统上,我们有一个变体“23.4”,vRecordValue 变为 234。我只能重现这个,因为我的系统分隔符是“,”。在我们的生产系统中就是这种情况,但我们已经更改了设置并且仍然看到这种情况发生。有趣的是,除了在调试模式下(不知道这里有什么关系)和通过简单测试,我们根本无法重现这一点。
我通过显式转换解决了这个问题:
vRecordValue:= StrToFloatDef(VarToStrDef(someVariant, '0'), 0);
问题:
- 有没有其他方法可以忽略小数点?
- 有人可以提供有关如何执行从 string 到 double 的默认转换的参考吗?我想了解其中的区别。
- 有没有什么方法可以从代码第一次 运行 时的值中缓存默认转换中使用的分隔符? ... 有疑问但又急于了解。
谢谢,
韦恩。
这是你的区域设置
我制作了这个小型演示应用程序以便对其进行测试:
procedure TForm60.FormCreate(Sender: TObject);
var
vRecordValue: Double;
sRecordValue: Variant;
begin
sRecordValue:= '23.4';
vRecordValue:= StrToFloatDef(VarToStrDef(sRecordValue, '0'), 0);
ShowMessage(FloatToStr(vRecordValue));
sRecordValue:= '23,4';
vRecordValue:= StrToFloatDef(VarToStrDef(sRecordValue, '0'), 0);
ShowMessage(FloatToStr(vRecordValue));
end;
在丹麦(我住的地方),我们使用 , 作为十进制分隔符,所以最后一个给了我正确的结果
关于我的第三个问题。这个问题本周再次出现。我没有意识到 locale/regional 设置只是为当前用户设置的。
要复制系统用户的设置,我们需要使用:
控制面板 > 区域和语言 > 管理 > 复制设置。
这就是我在测试时出现不一致的原因。这取决于我的应用程序是 运行 的用户,以及用户设置。
我有几行简单的代码:
var
vRecordValue:Double;
begin
vRecordValue:= someVariant;
其中 someVariant 是一个字符串(类型 256)。
在生产系统上,我们有一个变体“23.4”,vRecordValue 变为 234。我只能重现这个,因为我的系统分隔符是“,”。在我们的生产系统中就是这种情况,但我们已经更改了设置并且仍然看到这种情况发生。有趣的是,除了在调试模式下(不知道这里有什么关系)和通过简单测试,我们根本无法重现这一点。
我通过显式转换解决了这个问题:
vRecordValue:= StrToFloatDef(VarToStrDef(someVariant, '0'), 0);
问题:
- 有没有其他方法可以忽略小数点?
- 有人可以提供有关如何执行从 string 到 double 的默认转换的参考吗?我想了解其中的区别。
- 有没有什么方法可以从代码第一次 运行 时的值中缓存默认转换中使用的分隔符? ... 有疑问但又急于了解。
谢谢,
韦恩。
这是你的区域设置
我制作了这个小型演示应用程序以便对其进行测试:
procedure TForm60.FormCreate(Sender: TObject);
var
vRecordValue: Double;
sRecordValue: Variant;
begin
sRecordValue:= '23.4';
vRecordValue:= StrToFloatDef(VarToStrDef(sRecordValue, '0'), 0);
ShowMessage(FloatToStr(vRecordValue));
sRecordValue:= '23,4';
vRecordValue:= StrToFloatDef(VarToStrDef(sRecordValue, '0'), 0);
ShowMessage(FloatToStr(vRecordValue));
end;
在丹麦(我住的地方),我们使用 , 作为十进制分隔符,所以最后一个给了我正确的结果
关于我的第三个问题。这个问题本周再次出现。我没有意识到 locale/regional 设置只是为当前用户设置的。
要复制系统用户的设置,我们需要使用:
控制面板 > 区域和语言 > 管理 > 复制设置。
这就是我在测试时出现不一致的原因。这取决于我的应用程序是 运行 的用户,以及用户设置。