使用double来临时存储货币值?

这个问题在这里已经有了答案:

  • 为什么不使用Double或Float来表示货币? 14个答案

  • 不,它仍然会导致问题,即使您不执行任何计算。 问题在于,您存储的值可能无法完全表示为double ,因此即使您只是将其存储并读回,也可能无法取回所存储的值。

    例如,如果你将0.1存储在double ,你会发现它实际上并不存储0.1,因为你不能完全用二进制表示0.1。


    不。双倍从来不是用于存储货币值的正确类型。 双精度值是浮点值,也就是说,它们基本上是x * 2 ^ y形式的数字,其中x和y是整数。 因此,诸如0.10(10美分)的某些值不具有双精度表示。


    这里的问题是,当你在一个double变量中保存10.12时,它可能没有一个精确的双重表示,所以Java运行时会将它保存为最接近的双重表示形式,比如10.1199999999999或10.1200000000001(只是一个例子,我不确定,必须测试)。 所以你明白了,只要你把这个值放在一个双变量中,货币值就近似了。 然而,这就是说,你仍然可以使用双精度进行计算,然后在打印出值或写入文件时使用适当的格式,以便根据应用程序隐藏非有效数字。

    链接地址: http://www.djcxy.com/p/85813.html

    上一篇: Using double to temporarily store currency values?

    下一篇: number formatting