Java 货币价值的浮动和加倍

Java 货币价值的浮动和加倍,java,floating-point,double,currency,Java,Floating Point,Double,Currency,我已经在Java System.out.print(1-.6)prints.4中试验了float和double类型的错误,结果在System.out.print(1-.7)中有点出乎意料(0.300000000000000004)。如果有人能向我提供一些资源来解释为什么会发生这种情况,这将是很有帮助的。我假设它不是特定于Java的,而是这些类型固有的问题 谢谢 Java中真正的类型是的实现。这些是实数的近似值,而不是精确的表示。有些实数如0.8无法准确表示。Java中的实数类型是的实现。这些是实

我已经在Java System.out.print(1-.6)prints.4中试验了float和double类型的错误,结果在System.out.print(1-.7)中有点出乎意料(0.300000000000000004)。如果有人能向我提供一些资源来解释为什么会发生这种情况,这将是很有帮助的。我假设它不是特定于Java的,而是这些类型固有的问题


谢谢

Java中真正的类型是的实现。这些是实数的近似值,而不是精确的表示。有些实数如0.8无法准确表示。

Java中的实数类型是的实现。这些是实数的近似值,而不是精确的表示。一些实数(如0.8)无法准确表示。

如前所述,
浮点型和
双精度型不能存储不表示为2^-n个值之和的值(n大小取决于实现)


使用该类。

如前所述,
float
double
类型无法存储不表示为2^-n个值之和的值(n大小取决于实现)


改为使用该类。

给出了最佳建议。使用BigDecimal。我发现,在目前的1123061个问题中,67%的问题都与浮点不准确有关,这是一个不断有趣的来源:-)那很好,我不是唯一的一个。为链接干杯。的可能副本将提供最佳推荐。使用BigDecimal。我发现,在目前的1123061个问题中,67%的问题都与浮点不准确有关,这是一个不断有趣的来源:-)那很好,我不是唯一的一个。为链接干杯。干杯可能重复,是的,我读过关于使用BigDecimal进行货币计算的线程,只是对这些类型感到好奇。干杯,是的,我读过关于使用BigDecimal进行货币计算的线程,只是对这些类型感到好奇。谢谢Vincent!我要读那一页,太多可怕的符号了:(发现这一页很有用。谢谢文森特!我要读那一页,太多可怕的符号了。)(发现这一页很有用。