Čí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