gpt4 book ai didi

java - Java 中的大数

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:07:34 26 4
gpt4 key购买 nike

我正在考虑使用 BigDecimal 来比较舍入到 2 位数的两个货币值。例如,我希望以下结果为 0,因为我正在比较应该舍入到 0.02 的值和 0.02 的值。但它产生 -1 !有正确的方法吗?

这也适用于更大的数字,例如 123.45 和 123.4534 ... 当使用“compareTo”时应该产生 0。

我试过使用数学上下文,但它看起来并不优雅......有正确的方法吗?

BigDecimal spread = new BigDecimal(0.01934);
spread.setScale(2, RoundingMode.HALF_EVEN);
System.out.format("0.0193 ? 0.02 = %d\n", spread.compareTo(new BigDecimal(0.02)));

解决方案是:

BigDecimal spread = new BigDecimal(0.01934).setScale(2, RoundingMode.HALF_EVEN);
BigDecimal loSpread = new BigDecimal(0.02).setScale(2, RoundingMode.HALF_EVEN);
System.out.format("0.0193 ? 0.02 = %d\n", spread.compareTo(loSpread));

最佳答案

首先,BigDecimal 是不可变的。您必须返回 setScale 方法调用的结果:

spread = spread.setScale(2, RoundingMode.HALF_EVEN);

接下来,您必须提高第二个 BigDecimal 的准确性,因为它是从 double 派生的——不是一个非常准确的实体。所以尝试一个字符串:

 spread.compareTo(new BigDecimal("0.02"))

关于java - Java 中的大数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11174454/

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