Qu'est-ce que c'est que cette erreur ????? Pourquoi il ne me donne pas 0.03 ?
Parce que le type double ne représente pas exactement la plupart des nombres décimaux. Il représente exactement les nombres de la forme s n*2^m où s est le signe (+ ou -) n est un entier entre 0 et 2^53 - 1 m est un entier entre -1023 et +1024
Avec ça, on ne peut pas représenter exactement un nombre décimal aussi simple que 0.1 car sa représentation en base 2 a un nombre infini de bits!
Pour avoir des résultats exacts sur les décimaux, il faut soit utiliser le type java.math.BigDecimal (lourd et lent), soit se créer son propre type décimal (s'inspirer du type decimal de C# pour un bon compromis range/precision/taille/vitesse).
Bruno.
"Emmanuel" <degremond@caramail.com> a écrit dans le message de
news:d2ae5fa6.0407041643.102517cd@posting.google.com...
System.out.println( 1.33 - 1.3 );
m'affiche 0.030000000000000027
Qu'est-ce que c'est que cette erreur ?????
Pourquoi il ne me donne pas 0.03 ?
Parce que le type double ne représente pas exactement la plupart des nombres
décimaux.
Il représente exactement les nombres de la forme s n*2^m où
s est le signe (+ ou -)
n est un entier entre 0 et 2^53 - 1
m est un entier entre -1023 et +1024
Avec ça, on ne peut pas représenter exactement un nombre décimal aussi
simple que 0.1 car sa représentation en base 2 a un nombre infini de bits!
Pour avoir des résultats exacts sur les décimaux, il faut soit utiliser le
type java.math.BigDecimal (lourd et lent), soit se créer son propre type
décimal (s'inspirer du type decimal de C# pour un bon compromis
range/precision/taille/vitesse).
Qu'est-ce que c'est que cette erreur ????? Pourquoi il ne me donne pas 0.03 ?
Parce que le type double ne représente pas exactement la plupart des nombres décimaux. Il représente exactement les nombres de la forme s n*2^m où s est le signe (+ ou -) n est un entier entre 0 et 2^53 - 1 m est un entier entre -1023 et +1024
Avec ça, on ne peut pas représenter exactement un nombre décimal aussi simple que 0.1 car sa représentation en base 2 a un nombre infini de bits!
Pour avoir des résultats exacts sur les décimaux, il faut soit utiliser le type java.math.BigDecimal (lourd et lent), soit se créer son propre type décimal (s'inspirer du type decimal de C# pour un bon compromis range/precision/taille/vitesse).
Bruno.
Mehdi KASMI
System.out.println( 1.33d - 1.3d );
"Emmanuel" a écrit dans le message de news:
System.out.println( 1.33 - 1.3 );
m'affiche 0.030000000000000027
Qu'est-ce que c'est que cette erreur ????? Pourquoi il ne me donne pas 0.03 ?
System.out.println( 1.33d - 1.3d );
"Emmanuel" <degremond@caramail.com> a écrit dans le message de
news:d2ae5fa6.0407041643.102517cd@posting.google.com...
System.out.println( 1.33 - 1.3 );
m'affiche 0.030000000000000027
Qu'est-ce que c'est que cette erreur ?????
Pourquoi il ne me donne pas 0.03 ?