x.xxxx不是有效的浮点数在语言/本地语言之间转换

问题描述

| 我有一个西班牙用户在执行此操作时得到了
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
变量可以随时恢复为默认值(例如
,
),例如在切换用户时。