4

我有一个奇怪的问题,在我的机器和生产服务器上转换字符串会得到不同的结果,例如:

procedure TForm1.Button1Click(Sender: TObject);
var
   s1: string;
   f1: double;
begin
   s1 := '1.234';
   f1 := StrToFloat(s1); 
end;

procedure TForm1.Button2Click(Sender: TObject);
var
   s2: string;
   f2: double;
begin
   s2 := '1,234';
   f2 := StrToFloat(s2); 
end;

Button1Click 在我的 WinXP 机器上的“1.234”结果不是有效的浮点值,而在 Win2K 机器上这工作得很好。

另一端的 Button2Click 在我的 WinXP 上运行,但确实导致 '1,234' is not a valid floating point value 错误。

两台机器的区域设置都设置为“German(Austria)” - 关于为什么会发生这种情况的任何想法,或者至少为什么区域设置对话框确实显示了与 Delphi“DecimalSeparator”和“GetLocaleChar(GetThreadLocale, LOCALE_SDECIMAL) 不同的小数分隔符字符。 , '.')?

问候,莱因哈德

4

1 回答 1

12

DecimalSeparator变量存储区域设置中定义的 Windows 小数分隔符的值。如果要使用StrToFloat函数转换的字符串中出现小数点,则它必须与当前的 DecimalSeparator 值匹配。我相信虽然区域设置匹配小数点分隔符在两个系统中一定是不同的。您可以使用此代码检查两个系统中设置的值。

uses
Windows;

procedure TForm1.Button3Click(Sender: TObject);
Var
StrDummy : string;
begin
 StrDummy:='Decimal Separator in Windows '+GetLocaleChar(GetThreadLocale, LOCALE_SDECIMAL, '.')+#13#10+
           'Decimal Separator in Delphi  '+DecimalSeparator;
 ShowMessage(StrDummy);

end;
于 2009-12-12T03:02:42.320 回答