2010-12-04 79 views
1

我已经在Java System.out.print(1-.6)打印.4中试验了float和double类型有什么问题,结果有点意外(0.30000000000000004)是System.out.print(1-0.7)。如果有人能够指导我解释某些资源来解释为什么会发生,那将会很有帮助。我假设它不是Java特定的,这些类型本身就是错误的。Float和Double为货币值

谢谢!

+0

http://docs.sun.com/source/806-3568/ncg_goldberg.html – 2010-12-04 17:12:01

+1

http://stackoverflow.com/questions/285680/representing-monetary-values-in-java给出了最好的建议。使用BigDecimal。 – 2010-12-04 17:16:17

+1

我觉得这是一个持续娱乐的来源,在目前的1,123,061个问题中,67%的问题与浮点错误有关:-) – paxdiablo 2010-12-04 17:17:08

回答

1

如所述文森特floatdouble类型不能存储将不被表示为2^-n值(Ñ大小取决于实现)的总和值。

改为使用BigDecimal类。