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;

WinXP マシンでの Button1Click の結果は '1.234' で、有効な浮動小数点値ではありませんが、Win2K マシンでは問題なく動作します。

反対側の Button2Click は WinXP で動作しますが、「1,234」は有効な浮動小数点値ではありませんというエラーが発生します。

両方のマシンの地域設定が「ドイツ語(オーストリア)」に設定されています-なぜこれが起こっているのか、少なくとも地域設定ダイアログに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 に答える