Question

J'ai ce problème bizarre qu'un converti d'une chaîne sur ma machine et un serveur de production obtient des résultats différents par exemple:

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;

Résultats Button1Click sur ma machine Windows XP dans un « 1.234 » n'est pas une valeur en virgule flottante valide alors que sur la machine Win2K cela fonctionne très bien.

Button2Click à l'autre bout se comporte sur mon Windows XP, mais ne se traduit dans un « 1,234 » n'est pas une erreur de valeur à virgule flottante valide.

Les deux machines ont des paramètres régionaux réglé sur « allemand (Autriche) » - des idées pour expliquer pourquoi ce qui se passe ou tout au moins pourquoi la boîte de dialogue régionale paramètres montre un caractère DecimalSeparator différent de celui du « DecimalSeparator » Delphi et « GetLocaleChar ( GetThreadLocale, LOCALE_SDECIMAL, '.)?

Cordialement, Reinhard

Était-ce utile?

La solution

DecimalSeparator variables stocke la valeur du séparateur décimal de Windows tel que défini dans les paramètres régionaux. Si un point décimal apparaît dans la chaîne pour convertir avec StrToFloat fonction il doit correspondre à la valeur DecimalSeparator actuelle. Je crois que même si les paramètres régionaux correspondent au séparateur décimal doit être différent dans les deux systèmes. vous pouvez vérifier avec ce code les valeurs définies dans les deux systèmes.

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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top