【发布时间】:2015-02-26 17:07:45
【问题描述】:
我需要将 csv 中的确切值存储到数据库中。列有货币值。所以 利用 BigDecimal 存储货币值。
考虑以下不同情况的示例:
案例一:
BigDecimal d=new BigDecimal(1);
System.out.println(d);
我得到了“1”作为预期的输出。
案例 2:
但是当我添加一个小数时,我会得到不同的结果。
BigDecimal d=new BigDecimal(1.1);
System.out.println(d);
我得到 '1.100000000000000088817841970012523233890533447265625' 作为上述代码的输出。
案例 3:
BigDecimal d=new BigDecimal(2.50);
System.out.println(d);
我得到 '2.5' 作为上述代码的输出。在这种情况下它省略了零。
我的客户需要与传递到数据库中的完全相同的值。 因为,这些值与钱有关,所以我不能使用 String 来存储它们。
那么应该怎么做才能得到与我们传递给 Big Decimals 的完全相同的值呢?
【问题讨论】:
-
如果你想要精确的值,不要使用双精度。
1.1是双重的。改为传递"1.1"。关于 2.5 与 2.50,嗯,这些是完全相同的值。 -
@JBNizet 加一句关于为什么 1.1 是双精度的(并加上浮点运算这个术语),你就有答案了
标签: java database csv bigdecimal