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

时间:2014-11-15 13:13:31

标签: java double currency

很清楚为什么要加倍&合。在处理货币方面不是一个好的选择。 我不知道,因为只有在对价值进行计算时才出现问题,我是否认为完全没有问题只是将货币值存储在双倍中?

例如:  1.值从任何给定的源加载到double中  2.值被修改,由用户直接输入。  3.值以适当的格式存储到磁盘。

在上面的例子中,double只是一种将值存储在内存中的方法,因此如果对值执行计算,则不应该出现任何问题。 这是对的吗?

而且,如果正确,那么只有在执行计算时才使用货币特定类型更好吗? 不是从数据库加载1000个BigDecimals,而是可以加载1000个双打。然后,在必要时,定义一个BigDecimal,进行计算,并将结果的双精度保留在内存中。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

相关问题