我第一次用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文件中输入quantity作为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值进行比较。
However I don't understand how to have same string representation of two bigdecimals with same value with different precision. I know 2 and 2.0000 are not technically same for computer but for users they are same.所以我想要同样的代表。我也试着计算它们的哈希码,但它们也不同,这是正确的,因为它们对于计算机来说是完全不同的数字。
那么,如何将2作为BigDecimal转换为2.0000大小数位,以便获得相同的字符串表示形式。
事实证明,这对我来说是个阻碍
发布于 2014-05-08 18:07:30
如果我明白你的意思,你就错过了setScale()的作业结果;
d = d.setScale(4);编辑
至于你的第二个问题,你可以打电话给stripTrailingZeros() -
d = d.stripTrailingZeros();发布于 2014-05-08 18:06:36
BigDecimal是不变的。通过呼叫:
d.setScale(4);您只需创建新实例,而不使用它。
https://stackoverflow.com/questions/23549341
复制相似问题