Frage

Ich habe dieses seltsame Problem, dass ein Konvertit einer Schnur auf meinem Rechner und einem Produktionsserver unterschiedliche Ergebnisse zB bekommt:

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;

Button1Click Ergebnisse auf meiner WinXP Maschine in einem ‚1.234‘ ist kein gültig Gleitkommawert während auf der Win2K Maschine das funktioniert ganz gut.

Button2Click auf das andere Ende auf meinem WinXP verhält sich aber führt in eine ‚1.234‘ ist kein gültiger Gleitkommawert Fehler.

Beide Maschinen haben sich die regionalen Einstellungen auf „Deutsch (Österreich)“ - irgendwelche Ideen, warum dies geschieht, oder zumindest, warum die regionalen Einstellungen-Dialog zeigen sich eine andere DecimalSeparator Charakter als der Delphi „DecimalSeparator“ und „GetLocaleChar ( GetThreadLocale, LOCALE_SDECIMAL, '')?

Viele Grüße, Reinhard

War es hilfreich?

Lösung

DecimalSeparator Variable speichert der Wert der Windows-Dezimaltrennzeichens wie in den regionalen Einstellungen definiert. Wenn ein Komma im String erscheint mit der StrToFloat Funktion konvertieren, dann muss es mit dem aktuellen DecimalSeparator Wert entsprechen. Ich glaube, dass, obwohl die regionalen Einstellungen der Dezimaltrennzeichens entsprechen in beiden Systemen unterschiedlich sein müssen. Sie können die eingestellten Werte in beiden Systemen mit diesem Code überprüfen.

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top