我有几行简单的代码:
var
vRecordValue:Double;
begin
vRecordValue:= someVariant;
其中someVariant是一个字符串(类型256)。
在生产系统上,我们有一个' 23.4'的变体。并且vRecordValue变为234.我只能重现这是我的系统分隔符是','。在我们的生产系统中,情况确实如此,但我们已经改变了设置,但仍然看到了这种情况。值得注意的是,除了调试模式之外我们无法重现这一点(不知道这里的关系是什么),并通过一个简单的测试。
我通过显式转换修复了此问题:
vRecordValue:= StrToFloatDef(VarToStrDef(someVariant, '0'), 0);
问题:
谢谢,
韦恩。
答案 0 :(得分:2)
这是您的区域设置
我已经制作了这个samall演示应用程序以便进行测试:
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;
在丹麦(我住的地方)我们使用,作为十进制分隔符,所以最后一个给我正确的结果
答案 1 :(得分:1)
关于我的第三个问题。这个问题本周再次出现。我没有意识到只为当前用户设置了区域设置/区域设置。
要复制系统用户的设置,我们需要使用:
控制面板>地区和语言>行政>复制设置。
这就是我在测试时出现不一致的原因。它取决于我的应用程序运行的用户和用户设置。