Un double est un fichier binaire 64 bits à virgule flottante représentation d'un nombre. Binaire des nombres à virgule flottante ne peut pas représenter avec exactitude la plupart des fractions décimales. Ils peuvent représenter avec exactitude 1/2, 1/4, 1/64+1/32, etc, mais ils ne peuvent pas représenter avec exactitude 0.9 0.1. En outre, leur précision est limitée.
Dans votre cas, 254.99999999999999 a exactement la même représentation que 255.0 en interne. Vous pouvez voir cela en cochant une version hexadécimale de la version de la fraction binaire, à l'aide de l' Double.toHexString
méthode. Parce que 254.99999999999999 est déjà égal à 255,0, lorsque vous coupez la partie fractionnaire par moulage d'un entier de 32 bits, vous vous retrouvez avec 255.
System.out.println("a: " + Double.toHexString(254.99999999999999d));
System.out.println("b: " + Double.toHexString(255d));
Sortie
a: 0x1.fep7
b: 0x1.fep7