我有一位西班牙语用户在执行此操作时获得invalid floating point error
var
S : String;
R : Real;
begin
S := '3.12345';
R := StrToFloat(S); //- Exception here.
原因是他的位置使用,
作为小数位!
如何在没有轰炸的情况下将上面的字符串安全地转换为浮动字符串。
答案 0 :(得分:12)
滚动您自己的StrToFloat版本
function StrToFloat_UK(const AStr: string): Float;
var
FS: TFormatSettings;
begin
FS.Create('en-UK');
Result:= StrToFloat(AStr, FS):
end;
并使用它代替StrToFloat。
答案 1 :(得分:6)
将StrToFloat
的第二次重叠与TFormatSettings
设置为DecimalSeparator
的{{1}}一起使用。
答案 2 :(得分:1)
您可以使用val
程序,它会忽略本地系统设置。
var
S : String;
R : Real;
Test: Integer;
begin
S := '3.12345';
Val(S, R, Test);
end;
答案 3 :(得分:0)
如果您知道字符串使用.
作为小数点分隔符,那么您应该执行类似
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.UpdateFormatSettings := false;
DecimalSeparator := '.';
end;
该行
Application.UpdateFormatSettings := false;
非常重要。此属性的默认值为true
,在这种情况下,DecimalSeparator
变量可以随时恢复为其默认值(例如,
),例如当您切换用户时。 / p>