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

Delphi 5-StrToFloat在WinXP和Win2K上的结果不同,delphi,delphi-5,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

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

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;
按钮1在“1.234”中我的WinXP计算机上的单击结果不是有效的浮点值,而在Win2K计算机上,它可以正常工作

按钮2单击另一端在我的WinXP上运行,但会导致“1234”不是有效的浮点值错误

这两台机器的区域设置都设置为“German(Austria)”——您知道为什么会发生这种情况,或者至少知道为什么区域设置对话框显示的小数分隔符与Delphi的“decimalseparator”和“GetLocaleChar(GetThreadLocale,LOCALE_SDECIMAL,”.”不同吗

问候,,
Reinhard

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

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;

thx,这也是我的想法,所以我打印了小数分隔符,它显示的与区域设置中显示的不同于“小数分隔符”或“GetLocaleChar(GetThreadLocale,LOCALE_SDECIMAL)”。“总之,我已经设置并重新设置了从德语(奥地利)到英语(英国)的区域设置反之亦然,你不会相信,现在一切都好了。