
[英]class EVariantTypeCastError with message 'Could not convert variant of type (String) into type (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);
问题:
谢谢,
韦恩。
这是您的区域设置
为了测试它,我做了这个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;
在丹麦(我住的地方)我们使用,作为十进制分隔符,所以最后一个给我正确的结果
关于我的第三个问题。 这个问题本周再次出现。 我没有意识到只为当前用户设置了区域设置/区域设置。
要复制系统用户的设置,我们需要使用:
控制面板>区域和语言>管理>复制设置。
这就是我在测试时遇到不一致的原因。 它取决于我的应用程序运行的用户和用户设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.