Problème STR TO FLOAT Win 7 Anglais [Résolu]

cs_bazbazus 121 Messages postés lundi 26 janvier 2009Date d'inscription 27 août 2015 Dernière intervention - 26 janv. 2013 à 22:48 - Dernière réponse : Guillemouze 1015 Messages postés samedi 25 octobre 2003Date d'inscription 29 août 2013 Dernière intervention
- 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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 27 janv. 2013 à 15:57
3
Merci
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]

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de Cirec
dubois77 692 Messages postés jeudi 17 avril 2008Date d'inscription 14 septembre 2018 Dernière intervention - 27 janv. 2013 à 08:13
0
Merci
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
Commenter la réponse de dubois77
dubois77 692 Messages postés jeudi 17 avril 2008Date d'inscription 14 septembre 2018 Dernière intervention - 27 janv. 2013 à 08:15
0
Merci
après recherche, le point 2 est annulé : c'est le signe des milliers !


Dubois77
site perso
Commenter la réponse de dubois77
dubois77 692 Messages postés jeudi 17 avril 2008Date d'inscription 14 septembre 2018 Dernière intervention - 27 janv. 2013 à 12:49
0
Merci
sauf qu'il faut peut être 3 chiffres après la virgule
donc en gros : strtofloat('150,400');

Dubois77
site perso
Commenter la réponse de dubois77
cs_bazbazus 121 Messages postés lundi 26 janvier 2009Date d'inscription 27 août 2015 Dernière intervention - 27 janv. 2013 à 17:07
0
Merci
Merci Cirec ;)
Commenter la réponse de cs_bazbazus
Guillemouze 1015 Messages postés samedi 25 octobre 2003Date d'inscription 29 août 2013 Dernière intervention - 28 janv. 2013 à 09:33
0
Merci
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;
Commenter la réponse de Guillemouze

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.