Float и Double для денежных значений - PullRequest
1 голос
/ 04 декабря 2010

Я экспериментировал, что не так с типами float и double, в Java System.out.print (1-.6) печатает .4 и результат немного неожиданный (0.30000000000000004) в случае System.out.print ( 1-0,7). Было бы полезно, если бы кто-нибудь смог направить меня к некоторым ресурсам, объясняющим ПОЧЕМУ это происходит. Я предполагаю, что это не специфично для Java, что-то не так с этими типами.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 04 декабря 2010

Настоящие типы в Java - это реализации IEEE754 с одинарной и двойной точностью записи с плавающей точкой . Это приближения действительных чисел, а не точные представления. Некоторые действительные числа, такие как 0,8, не могут быть точно представлены.

1 голос
/ 04 декабря 2010

Как сказал Винсент, типы float и double не могут хранить значения, которые не будут представлены в виде суммы 2 ^ -n значений (размер n зависит от реализации).

Вместо этого используйте класс BigDecimal .

...