Séparateur décimal [Résolu]

Messages postés
647
Date d'inscription
mardi 22 avril 2003
Dernière intervention
9 janvier 2017
- - Dernière réponse : f0xi
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
- 16 févr. 2006 à 04:30
Lors de la vonvertion d'une chaine en flotan il arrive d'avoir l'erreur de convertion car le séparateur décimal n'est pas celmui du système.

Au lieu d'utiliser strtofloat(s) quelle instruction simple utuliser pour que cela focntionne aussi bien avec comme séparateur décimal le point "." ou la virgule "," ?

Sans changer la configuration système afin que cela fonctionne sur un grand nombre de PC

yvessimon
Afficher la suite 

Votre réponse

10 réponses

Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
0
Merci
salut,

une fonction qui accepte les 2 format je ne connais pas mais tu peux
soit tester la presence de l'un ou l'autre des séparateur decimaux;
soit utiliser la fonction stringreplace pour mettre le séparateur en
conformité avec le systeme soit enfin gérer les erreurs de conversion

poru mio je pense qu'il est plus simple de remplacer le séparateur decimal avec la fonction stringreplace:

chaine:=stringreplace(chaine,'.',decimalseparator,[rfReplaceAll]);



@+

jlen
Commenter la réponse de jlen100
Messages postés
119
Date d'inscription
dimanche 28 septembre 2003
Dernière intervention
19 juin 2007
0
Merci
salut!
StrToFloat(const S:string;const FormatSettings:TFormatSettings)
où FormatSettings est le séparateur décimal.

a++
Commenter la réponse de flor003
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
0
Merci
salut flo003

mettre le formtsetting n'empèchera pas l'erreur de conversion si celui
dans la chaine ne correspond pas à celui défini dans formatsetting



@+

jlen
Commenter la réponse de jlen100
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
0
Merci
on peut améliorer en automatisant la détection

if decimalseparator= ',' then

chaine: =stringreplace(chaine,'.',decimalseparator,[rfReplaceAll])

else

chaine:=stringreplace(chaine,',',decimalseparator,[rfReplaceAll]);



@+

jlen
Commenter la réponse de jlen100
Messages postés
119
Date d'inscription
dimanche 28 septembre 2003
Dernière intervention
19 juin 2007
0
Merci
salut jlen100!

Complètement d'accord avec ta méthode.
Mais je m'excuse de ne pas être allé au bout de mon explication.
Et comme je suis quelqu'un de très compliqué je propose ma solution (qui n'est pas la meilleure on est d'accord, j'ai pas essayé j'ai honte si ça se trouve marche pas):

if decimalseparator=',' then
StrToFloat(chaine,'.')
else
StrToFloat(chaine,'.');

ps: ne pas hésiter à me le dire si j'ai dis une connerie
a++
Commenter la réponse de flor003
Messages postés
647
Date d'inscription
mardi 22 avril 2003
Dernière intervention
9 janvier 2017
0
Merci
en utilisant: stringreplace(chaine,'.',decimalseparator,[rfReplaceAll])



ou stringreplace(chaine,',',decimalseparator,[rfReplaceAll])



correspond à ma solution.

Merci

yvessimon
Commenter la réponse de yvessimon
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
0
Merci
flor003 comme je te l'ai dit le fait de forcer le séparateur décimal ne
supprimera les erreurs de convertion. je m'explique si tu veux
convertir la chaine:= '123 . 25' et que le séparteur décimal est à ',' tu auras une erreur Eerrorconvert de même si tu as 123,25' et que le séparteur décimal est à '.' il faut qu'il y ait adéquation entre la chaine et le séparateur décimal la seule façon à ma connaissance est de forcer la chaine au séparateur décimal.

en fait quand tu ecis:

if decimalseparator =',' then

StrToFloat(chaine,'.')

else

StrToFloat(chaine,'.');

cela revient à écrire : StrToFloat(chaine,DecimalSeparator)



@+

jlen
Commenter la réponse de jlen100
Messages postés
119
Date d'inscription
dimanche 28 septembre 2003
Dernière intervention
19 juin 2007
0
Merci
merci pour cette précision JLEN100 , je n'étais pas sur de mon truc.
Commenter la réponse de flor003
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
0
Merci
pas de quoi il peut toutefois rester un problème: Si la chaine a été
formatée avec des séparateurs de millier qui sont l'inverse des
séparateur decimaux---> un bon casse tete!



@+

jlen
Commenter la réponse de jlen100
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
-2
Merci
j'ai deja poster la solution plusieurs fois pour ce genre de probleme.
merci de chercher sur le forum.

La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.
<hr>
Commenter la réponse de f0xi

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.