Envoyé par
loukoum82
il se trouve que 2.3*3.5=8.05 donc cette condition devrait m'afficher 'true'.
C'est un souci inhérent à la façon dont sont stockés les nombres décimaux dans un nombre dit "à virgule flottante".
En javascript, les valuers décimales sont effectivement stockées dans les nombres à virgule flottante 'double précision (ie. codés sur 64 bits), cf. ceci:
Les nombres en JavaScript sont « des valeurs au format
IEEE 754 en double précision 64 bits »
Et comme le précise wikipédia dans les précautions d'emploi, cette façon de coder les nombres induit parfois des petites pertes de précision qui peuvent (au fur et à mesure de l'enchaînement des calculs) devenir significatives.
Une solution serait éventuellement de ne pas tester l'égalité exacte, mais un intervalle incluant une imprécision 'acceptable', genre:
au lieu de:
faire:
if ( Math.abs(i-8.0) < 0.001 )
EDIT: bon ben je me suis fait multi griller sur ce coup là
Partager