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

时间:2011-05-01 21:46:00

标签: string delphi floating-point

我有一位西班牙语用户在执行此操作时获得invalid floating point error

var
  S : String;
  R : Real;
begin
  S := '3.12345';
  R := StrToFloat(S); //- Exception here.

原因是他的位置使用,作为小数位! 如何在没有轰炸的情况下将上面的字符串安全地转换为浮动字符串。

4 个答案:

答案 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>