|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 195 ![]() |
Bonjour,
Je n'y comprends rien !!! Il s'agit d'une simple soustraction afin de vérifier la balance d'une écriture comptable. Client - TVA = Produit Autrement il y a un problème d'arrondi à vérifier. Code :
Or, les chiffres sont toujours exacts, les décimales étant bien marquées par un . et non pas par une virgule. Par exemple, message réel : ATTENTION, l'écriture de 2980 ne balance pas. Cli = 99.1 | Tva = 17.46 | Prod = 81.64 Où est le défaut ? Merci d'avance. |
||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() |
Essaye
Code :
|
||
|
|
00
|
|
|
#3 | ||
|
Membre actif
![]() Inscription : avril 2006 Messages : 300 ![]() |
c'est d'autant plus bizarre que
Code :
Il n'y aurait pas un problème de typage derrière ça ?
__________________
C'est curieux chez les marins ce besoin de faire des phrases ! |
||
|
|
00
|
|
|
#4 |
|
Débutant
Samuel M. K. FOLI-AWLIInscription : avril 2003 Messages : 50 ![]() |
Je ne pense pas que ce soit les parentheses parce que jai stocke le resultat dans une variable avant de tester la comparaison et cela n'avait pas marcher.
Essaye number_format() pour formater le resultat de la difference et le produit. Ca a marche chez moi en tout cas. a+ |
|
00
|
|
|
#5 | |||||
|
Membre Expert
![]() |
Citation:
Exemple : Code :
|
|||||
|
|
00
|
|
|
#6 |
|
Membre actif
![]() Inscription : avril 2006 Messages : 300 ![]() |
number_format marche bien, c'est vrai.
mais ça retourne une string, c'est quand même bizarre de faire un calcul en comparant des chaines de caractères.
__________________
C'est curieux chez les marins ce besoin de faire des phrases ! |
|
|
00
|
|
|
#7 |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 195 ![]() |
Bonsoir,
Merci beaucoup de vos réponses. La piste du typage est plausible, mais j'ai testé les trois valeurs avec is_float, c'est bien du float. Je me demande si ce n'est pas une des valeurs qui a plus de décimales que les autres, d'où erreur systématique. Je vous dit ça après le dîner... Merci encore. |
|
|
00
|
|
|
#8 |
|
Débutant
Samuel M. K. FOLI-AWLIInscription : avril 2003 Messages : 50 ![]() |
Si tu n'as pas trouver mieux essaye
Code :
$valeur = (float) number_format($valeur,n); |
|
00
|
|
|
#9 | ||||
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 195 ![]() |
Re-bonsoir
J'ai fait le test suivant : Code :
99.1 17.46 81.64 1.42108547152E-14 0 Donc, de la soustraction de 3 nombres à 2 décimales, PHP trouve un micro-chouia qui n'existe pas. Je ne dis pas que c'est un bug de PHP, peut-être de mon serveur... En limitant le résultat à 2 décimales (ou même à 10, j'ai essayé) par round, cela devient bon. Donc, mon test devient : Code :
Mais d'où sort ce 1.42108547152E-14 ??? Vous avez idée ? Merci d'avance. PS : dans les calculs, il faut utiliser round (), pas number_format () qui est une fonction de présentation, pas de calcul. |
||||
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() |
Je crois que le 1.42108547152E-14 provient du fait qu'une soustraction n'est pas commutative et donc il ne sait pas trop par où commencer, du coup il retourne la valeur minimale d'un nombre en PHP
|
|
|
00
|
|
|
#11 |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 195 ![]() |
Bonsoir,
Merci de ta réponse, c'est bon à savoir... |
|
|
00
|
|
|
#12 | ||
|
Membre actif
![]() Inscription : avril 2006 Messages : 300 ![]() |
Je crois que j'ai trouvé... j'avais eu le même problème en javascript...
C'est un pb de nombre à virgule flotante. si vous faites Code :
81.63999999999998635757947340607643127441406250000000 81.64000000000000056843418860808014869689941406250000 Donc c'est pas pareil
__________________
C'est curieux chez les marins ce besoin de faire des phrases ! |
||
|
|
00
|
|
|
#13 |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 195 ![]() |
Encore merci, je crois que je peux cocher résolu.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com