Séparateur décimal [Résolu]

yvessimon 647 Messages postés mardi 22 avril 2003Date d'inscription 9 janvier 2017 Dernière intervention - 15 févr. 2006 à 10:27 - Dernière réponse : f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention
- 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 

10 réponses

Répondre au sujet
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 15 févr. 2006 à 11:49
0
Utile
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
flor003 119 Messages postés dimanche 28 septembre 2003Date d'inscription 19 juin 2007 Dernière intervention - 15 févr. 2006 à 11:51
0
Utile
salut!
StrToFloat(const S:string;const FormatSettings:TFormatSettings)
où FormatSettings est le séparateur décimal.

a++
Commenter la réponse de flor003
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 15 févr. 2006 à 11:59
0
Utile
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
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 15 févr. 2006 à 13:07
0
Utile
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
flor003 119 Messages postés dimanche 28 septembre 2003Date d'inscription 19 juin 2007 Dernière intervention - 15 févr. 2006 à 14:23
0
Utile
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
yvessimon 647 Messages postés mardi 22 avril 2003Date d'inscription 9 janvier 2017 Dernière intervention - 15 févr. 2006 à 14:38
0
Utile
en utilisant: stringreplace(chaine,'.',decimalseparator,[rfReplaceAll])



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



correspond à ma solution.

Merci

yvessimon
Commenter la réponse de yvessimon
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 15 févr. 2006 à 14:41
0
Utile
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
flor003 119 Messages postés dimanche 28 septembre 2003Date d'inscription 19 juin 2007 Dernière intervention - 15 févr. 2006 à 15:14
0
Utile
merci pour cette précision JLEN100 , je n'étais pas sur de mon truc.
Commenter la réponse de flor003
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 15 févr. 2006 à 15:34
0
Utile
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
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 16 févr. 2006 à 04:30
-2
Utile
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.