问题描述
|
我有一个西班牙用户在执行此操作时得到了
invalid floating point error
var
S : String;
R : Real;
begin
S := \'3.12345\';
R := StrToFloat(S); //- Exception here.
原因是他的位置使用uses2ѭ作为小数位!
我如何安全地将上面的字符串转换为浮点数,而不给用户炸弹。
解决方法
滚动自己的StrToFloat版本
function StrToFloat_UK(const AStr: string): Float;
var
FS: TFormatSettings;
begin
FS.Create(\'en-UK\');
Result:= StrToFloat(AStr,FS):
end;
并使用它代替StrToFloat。
,将StrToFloat
的第二个过载与DecimalSeparator
设置为.
的TFormatSettings
一起使用。
,您可以使用步骤val
,而忽略本地系统设置。
var
S : String;
R : Real;
Test: Integer;
begin
S := \'3.12345\';
Val(S,R,Test);
end;
,如果您知道字符串使用.
作为小数点分隔符,则应执行以下操作
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.UpdateFormatSettings := false;
DecimalSeparator := \'.\';
end;
线
Application.UpdateFormatSettings := false;
非常重要。此属性的默认值为true
,在这种情况下,DecimalSeparator
变量可以随时恢复为默认值(例如,
),例如在切换用户时。