Problème STR TO FLOAT Win 7 Anglais

Résolu
cs_bazbazus Messages postés 119 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 27 août 2015 - 26 janv. 2013 à 22:48
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 - 28 janv. 2013 à 09:33
Salut j’ai un problème de strtofloat sur win 7 voici le code concerné
var F:float;
F:=strtofloat('150,40);

Voice l’erreur rencontrer « Erreur : '150,40' n'est pas une valeur en virgule flottante correcte »
Tous les PC win 7 que j’ai essayé marchent normale,

mais seul un PC de mon ami créer ce problème. Le Win 7 de mon ami et une version anglaise

6 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
27 janv. 2013 à 15:57
Salut,

non non ... cette erreur est tout à fait normale !

L'écriture décimale se fait avec une virgule "," en Français et avec un point "." en Anglais

si tu es certain que tous les chiffres utilisent la notation Française "," il te faut forcer le format :
const
  LANG_FRENCH = (SORT_DEFAULT shl 16) or ((SUBLANG_FRENCH shl 10) or LANG_FRENCH);
var
  FmtSettings: TFormatSettings;
  F: Extended;
begin
  GetLocaleFormatSettings(LANG_FRENCH, FmtSettings);
  F := StrToFloat('150,40', FmtSettings);
end;


pour ceux qui voudraient tester, voici une version qui inverse le problème à savoir utiliser la notation décimale Anglaise "." sur un système "OS" Français:

ce code provoque la même erreur :
F := StrToFloat('150.40');

'150.40' n'est pas une valeur en virgule flottante correcte.

la solution est:
const
  LANG_ENGLISH_US = (SORT_DEFAULT shl 16) or ((SUBLANG_ENGLISH_US shl 10) or LANG_ENGLISH);
var
  FmtSettings: TFormatSettings;
  F: Extended;
begin
  GetLocaleFormatSettings(LANG_ENGLISH_US, FmtSettings);
  F := StrToFloat('150.40', FmtSettings);
end;


[hr]@+Cirec
[hr]
3
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
27 janv. 2013 à 08:13
salut
je ne suis pas spécialiste en la matière mais 2 remarques

[quote]strtofloat('150,40);
/quote
1- manque ' à la fin
2- , ne devrait-il pas être . ?

Dubois77
site perso
0
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
27 janv. 2013 à 08:15
après recherche, le point 2 est annulé : c'est le signe des milliers !


Dubois77
site perso
0
dubois77 Messages postés 675 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 19 février 2019 14
27 janv. 2013 à 12:49
sauf qu'il faut peut être 3 chiffres après la virgule
donc en gros : strtofloat('150,400');

Dubois77
site perso
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_bazbazus Messages postés 119 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 27 août 2015
27 janv. 2013 à 17:07
Merci Cirec ;)
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
28 janv. 2013 à 09:33
tu peux aussi utiliser le paramétrage actuel, en forçant le séparateur décimal. En reprenant l'exemple de Cirec :
var
  FmtSettings: TFormatSettings;
  F: Extended;
begin
  GetLocaleFormatSettings(LOCALE_USER_DEFAULT, FmtSettings);
  FmtSettings.DecimalSeparator := '.';
  F := StrToFloat('150.40', FmtSettings);
end;
0
Rejoignez-nous