gpt4 book ai didi

Java BigDecimal 行为

转载 作者:行者123 更新时间:2023-11-30 06:19:09 25 4
gpt4 key购买 nike

我是第一次使用 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 记录进行比较。 数据库列的数据库类型为具有不同比例的十进制 例如,数量是标度定义为 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

现在因为我必须在数据库中的所有记录中比较 CSV 中的数百条记录,所以我正在考虑创建数据库中所有记录的 SHA1 值并将其与 CSV 记录内容的 SHA1 值进行比较。
但是我不明白如何用不同精度的相同值来表示两个 bigdecimals 的相同字符串表示形式。我知道 2 和 2.0000 在技术上对计算机来说并不相同,但对用户来说它们是相同的。
所以我想对它们有相同的表示。我也尝试计算它们的哈希码,但它们也不同,这是正确的,因为它们对于计算机来说是完全不同的数字。
那么我怎样才能将 2 作为 BigDecimal 转换为 2.0000 Bigdecimal,以便我可以获得相同的字符串表示形式。

这对我来说确实是一个障碍

最佳答案

如果我理解你的话,你错过了 setScale() 结果中的作业;

d = d.setScale(4);

编辑

关于你的第二个问题,你可以调用stripTrailingZeros() -

d = d.stripTrailingZeros();

关于Java BigDecimal 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23549341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com