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)”。“总之,我已经设置并重新设置了从德语(奥地利)到英语(英国)的区域设置反之亦然,你不会相信,现在一切都好了。