|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() |
Bonjour !
J'ai un champs prix FLOAT que je dois renseigner moi meme. J'écris dans ce champs 12,4 et lorsque j'insert dans ce champs la valeur 12,4 et que je poste la donnée, tout marche.... Parcontre quand je reviens, le champs n'est plus égal à 12,4 mais à 12,399999999999999.... Que se passe t - il ? Merci |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Il se passe ce qu'il doit se passer avec un FLOAT. Les floats sont à utiliser pour les calculs scientifiques et non pour les chiffres de type compta...
C'est lié à la façon d'encoder le float en binaire. Si vous arrondissez la valeur lue vous retomberez à votre 12.4. Mais ce n'est pas la solution... Donc pour en revenir à votre probleme qui n'en est pas un, si vous voulez enregistrer des chiffres sans qu'ils soient arrondis il faut utiliser DECIMAL ou NUMERIC. Ce n'est pas un probleme lié à interbase, mais un probleme purement informatique qui est bien connu. On le retrouvera donc dans tous les languages que se soit Delphi ou autre. |
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() |
merci ! j'ai mis un decimal ça marche au poil !!
|
|
|
00
|
|
|
#4 | ||
|
Nouveau Membre du Club
![]() Inscription : juillet 2003 Messages : 44 ![]() |
Salut,
Je tape directement : Code :
0.0500000000000070 | 0.0500000000000070 | 0.95 As-tu une explication ???? (et une solution...) Merci |
||
|
|
00
|
|
|
#5 |
|
Membre chevronné
![]() Serge LESPAGNARDConsultant informatique Inscription : janvier 2004 Messages : 588 ![]() |
avec quel sgbdr ? Sous firebird 1.5 ça fonctionne très bien et le résultat est correct.
J'obtiens bien 0.05|0.05|0.95 @+ |
|
|
00
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2003 Messages : 44 ![]() |
La version que j'utilise c'est Interbase Server 5.5.0.742.
Pour revenir à mon problème, je cré un champ temporaire dans ma table en decimal (15,2) lorsque je le cast en char(5) je retrouve une parfois une 3ème decimale exemple 7.77 -> 7.767. Je ne trouve pas de fonction d'arrondi. Je suis dans la m... En fait je veux convertir des heures en mn en heures en centieme, mais ces heures en mn sont stockées sous un type char(5). Quelqu'un a t-il une idée ? Merci
|
|
|
00
|
|
|
#7 |
|
Membre éclairé
![]() Inscription : décembre 2004 Messages : 379 ![]() |
il n'y a aucune fonction d'arrondie toute faite.
2 solutions: 1) par multiplication/cast/division ou via une udf pour la convertion des heures stockées dans une chaîne: il faut extraire les données de la chaîne (encore des udf) convertir en valeur et le reste sont des multiplications/divisions. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com