Delphi 5 - StrXoFloat在WinXP和Win2K上的结果不同

时间:2009-12-12 02:23:22

标签: delphi delphi-5

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

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;

我的WinXP机器上的Button1Click结果在'1.234'中不是有效的浮点值,而在Win2K机器上这可以正常工作。

另一端的Button2Click在我的WinXP上运行,但确实导致'1,234'不是有效的浮点值错误。

两台机器都将区域设置设置为“德语(奥地利)” - 任何关于为什么会发生这种情况的想法,或者至少为什么区域设置对话框确实显示与Delphi“DecimalSeparator”和“GetLocaleChar”不同的十进制分隔符。 GetThreadLocale,LOCALE_SDECIMAL,'。')?

此致 莱因哈德

1 个答案:

答案 0 :(得分: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;