gpt4 book ai didi

java - BigDecimal - 比较不变式与 DecimalFormat

转载 作者:行者123 更新时间:2023-11-30 04:41:54 25 4
gpt4 key购买 nike

我使用格式 ###,###.## 生成一个 BIgDecimal,结果为 660,000.00,然后我尝试将其与 new BigDecimal(660000.00) 进行比较,但每次都会返回 false时间。有没有办法将不变的值与它们创建时的初始格式进行比较?

最佳答案

这是因为两个 BigDecimals小数位数不同:

System.out.println(new BigDecimal("660000.00").scale()); // 2
System.out.println(new BigDecimal(660000.00).scale()); // 0

要比较它们(无论规模如何),您可以这样做:

BigDecimal bd1 = new BigDecimal("660000.00");
BigDecimal bd2 = new BigDecimal(660000.00);

int s = Math.max(bd1.scale(), bd2.scale());
.. bd1.setScale(s).equals(bd2.setScale(s)) .. // == true.
<小时/>

旁注:请注意,双文字(例如 .1)并不代表实际值 0.1,而是代表它的近似值。 (这是由于浮点表示不准确。)这可以通过执行来看到

System.out.println(new BigDecimal(.1));

打印 0.1000000000000000055511151231257827021181583404541015625

但是,new BigDecimal(".1") 确实代表了 0.1,这就是原因

new BigDecimal(.1).equals(new BigDecimal(".1"))

是假的。

关于java - BigDecimal - 比较不变式与 DecimalFormat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12088281/

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