我第一次使用BigDecimals进行编程。
为什么以下两个程序的行为不同
1) BigDecimal d = new BigDecimal("2.01").setScale(4);
System.out.println(d);
Gives me : 2.0100
And
2) BigDecimal d = new BigDecimal("2.01");
d.setScale(4);
System.out.println(d);
Gives me : 2.01
为什么会这样?
此外,我还有一项功能,我需要使用一些BigDecimal值将CSV文件中的行与DB记录记录进行比较。 DB列的DB类型为Decimal,具有不同的比例 例如,Quantity是具有定义为4的比例的列。 当用户在CSV文件中输入数量值为2时,检索如下:
BigDecimal q = new BigDecimal("2");
which gives me big decimal with scale as 0 and precision as 1 with value as 2.
当我使用
从DB检索相同的值时 rs.getBigDecimal(54) where 54 is column index,
I get Big decimal with precision as 0 and scale as 4 with value as 2.0000
现在由于我必须在DB中的所有记录中比较CSV中的数百条记录,我正在考虑创建DB中所有记录的SHA1值,并将其与CSV记录内容的SHA1值进行比较。
但是我不明白如何使用具有不同精度的相同值的两个bigdecimal具有相同的字符串表示。我知道2和2.0000在技术上不同于计算机,但对于用户来说它们是相同的
所以我希望对它们有相同的表示。我也试过计算他们的哈希码,但它们也是不同的,因为它们对于计算机来说完全不同
那么如何将BigDecimal转换为2.0000 Bigdecimal,以便我可以获得相同的String表示。
这确实是我的阻挡者
答案 0 :(得分:4)
如果我理解你,你就错过了setScale()的结果中的作业;
d = d.setScale(4);
修改强>
至于你的第二个问题,你可以致电stripTrailingZeros() -
d = d.stripTrailingZeros();
答案 1 :(得分:1)
BigDecimal是不可变的。致电:
d.setScale(4);
您只需创建新实例并且不要使用它。