Čísla s desetinnou čárkou jsou v počítači reprezentována podle standardu IEEE 754. Tato reprezentace ale není přesná což může vést k následujícím situacím.
double x = 0.5;
double y = 0.4;
double z = x - y;
System.out.println("Hodnota z: \t" + z);
Výsledek
Hodnota z: 0.09999999999999998
Další příklad
double mixer = 1099.00;
double mixerPoSleve = mixer * 0.9;
double trouba = 5999.00;
double troubaPoSleve = trouba * 0.9;
double celkovaCena = troubaPoSleve + mixerPoSleve;
System.out.println("mixér po slevě: \t" + mixerPoSleve);
System.out.println("trouba po slevě: \t" + troubaPoSleve);
System.out.println("celková cena: \t\t" + celkovaCena);
Výsledek
mixér po slevě: 989.1 trouba po slevě: 5399.1 celková cena: 6388.200000000001
Řešením je použít datový typ BigDecimal. Zde je s použitím BigDecimal upraven první příklad.
BigDecimal x = new BigDecimal("0.5");
BigDecimal y = new BigDecimal("0.4");
BigDecimal z = x.subtract(y);
System.out.println("Hodnota z: \t" + z);
Výsledek
Hodnota z: 0.1