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

发布于 2024-11-04 14:37:45 字数 243 浏览 0 评论 0原文

我有一位西班牙用户在执行此操作时收到无效浮点错误

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

其原因是他的位置使用 , 作为小数位!
我怎样才能安全地将上面的字符串转换为用户的浮点数而不被轰炸。

I have a spanish user who is getting an invalid floating point error when doing this

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

The reason for this is that his location uses , for the decimal place!
How can I safely convert the string above to a float for the user without it bombing out.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

悲欢浪云 2024-11-11 14:37:45

滚动您自己的 StrToFloat 版本

function StrToFloat_UK(const AStr: string): Float;
var
  FS: TFormatSettings;
begin
  FS.Create('en-UK');
  Result:= StrToFloat(AStr, FS): 
end;

并使用它代替 StrToFloat。

Roll your own version of StrToFloat

function StrToFloat_UK(const AStr: string): Float;
var
  FS: TFormatSettings;
begin
  FS.Create('en-UK');
  Result:= StrToFloat(AStr, FS): 
end;

And use this in place of StrToFloat.

摇划花蜜的午后 2024-11-11 14:37:45

StrToFloat 的第二个重载与将 DecimalSeparator 设置为 .TFormatSettings 结合使用。

Use the second overload of StrToFloat with a TFormatSettings that has DecimalSeparator set to ..

爱殇璃 2024-11-11 14:37:45

您可以使用过程 val,它会忽略本地系统设置。

var
S : String;
R : Real;
Test: Integer;
begin
  S := '3.12345';
  Val(S, R, Test);
end;

You could use the procedure val, it disregards local system settings.

var
S : String;
R : Real;
Test: Integer;
begin
  S := '3.12345';
  Val(S, R, Test);
end;
冷心人i 2024-11-11 14:37:45

如果您知道字符串使用.作为小数点分隔符,那么您应该执行类似

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.UpdateFormatSettings := false;
  DecimalSeparator := '.';
end;

The line

Application.UpdateFormatSettings := false;

is very important 的操作。该属性的默认值为true,在这种情况下,DecimalSeparator 变量可以随时恢复为其默认值(例如,) ,例如当您切换用户时。

If you know that the strings use . as the decimal separator, then you should do something like

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.UpdateFormatSettings := false;
  DecimalSeparator := '.';
end;

The line

Application.UpdateFormatSettings := false;

is very important. The default value of this property is true, and in such case, the DecimalSeparator variable may be reverted to its default value (e.g. ,) anytime, for instance when you switch user.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文