我有这个奇怪的问题,我的机器和生产服务器上的字符串转换得到不同的结果,例如:
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;
Run Code Online (Sandbox Code Playgroud)
在我的WinXP机器上的'1.234'中的Button1Click结果不是有效的浮点值,而在Win2K机器上这可以正常工作.
另一端的Button2Click在我的WinXP上运行,但确实导致'1,234'不是有效的浮点值错误.
两台机器都将区域设置设置为"德语(奥地利)" - 任何关于为什么会发生这种情况的想法,或者至少为什么区域设置对话框确实显示与Delphi"DecimalSeparator"和"GetLocaleChar(GetThreadLocale,LOCALE_SDECIMAL)不同的十进制分隔符,'.')?
此致,Reinhard
RRU*_*RUZ 12
所述DecimalSeparator变量存储在区域设置所定义的视窗小数点的值.如果要使用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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2069 次 |
| 最近记录: |