【发布时间】:2015-01-12 19:14:13
【问题描述】:
很清楚为什么要使用 double & co。在处理货币方面不是一个好的选择。 不过我想知道,由于仅在对值执行计算时才会出现问题,因此我假设将货币值存储在 double 中完全没有问题,我是否正确?
例如: 1. 值从任何给定来源加载到双精度 2. 值被修改,由用户直接输入。 3. 值以合适的格式存储到磁盘。
在上面的示例中,double 只是一种将值存储在内存中的方法,因此如果对值执行计算,则不会出现任何问题。 这是正确的吗?
而且,如果正确,仅在执行计算时使用特定于货币的类型不是更好吗? 与其从数据库加载 1000 个 BigDecimal,不如加载 1000 个双精度数。然后,在必要时,定义一个 BigDecimal,进行计算并将生成的双精度值保留在内存中。
【问题讨论】:
-
没有。当您将
double转换为BigDecimal时,您将无法获得预期的价值。将货币存储在double中会立即出错,因此如果您稍后要使用它进行计算,请不要这样做。当然,除非引入的错误与您的程序要求无关。 -
如果您在转换为
BigDecimal时足够小心并执行适当的舍入,并且您永远不需要超过 14 位有效数字,并且您始终知道要舍入到多少位,那么您的方法将是可行。不过,它仍然很脆弱。