gpt4 book ai didi

java - 如果未对金额应用任何操作,BigDecimal.doubleValue() 的准确性如何

转载 作者:搜寻专家 更新时间:2023-11-01 03:36:03 26 4
gpt4 key购买 nike

我需要发送一个值作为“double”,但我是:

  1. 一个值作为long
  2. 将其转换BigDecimal
  3. BigDecimal 上调用方法 scaleByPowerOfTen(使用“-2”使美分成为整数值)。
  4. BigDecimal 上调用 doubleValue() 以获得所需的 double 值。

现在我知道 double 值在对它们应用算术运算时会失去精度,但是如果我尝试按原样发​​送 double 值,我可能得到什么基于 BigDecimal,例如(我相信)上面的场景是。

这很重要,因为我必须以这种方式通过 SOAP 发送货币值(value) - 没有其他方式。

我还有这样的场景,其中 BigDecimal 是作为 String 创建的,然后在其上调用 doubleValue()在这种情况下我能得到什么?

编辑:示例代码:

long amountInCents = 1852;
BigDecimal amountInWholeUnits = BigDecimal.valueOf(amountInCents).scaleByPowerOfTen(-2);
double amountToSend = amountInWholeUnits.doubleValue();

对于金额以字符串形式提供的情况:

double amountToSend = new BigDecimal("18.52").doubleValue();

更新

现在我有了示例代码,我只是想我可以测试看看,所以我做了一个for循环并使用了System.out.println:到目前为止很好,值是正确的,所以我相信这在通过 SOAP 发送时也是一样的。如果我错了,请纠正我。

最佳答案

因为一美分等于一美元的 1/100,而且数字 1/100 或 0.01 不能 完全表示为二进制 float ,会发生一些轻微的精度损失。在 $18.52 的特定示例中,生成的 double 将保持最接近 18.52 的 double 值,但它不会完全等于 18.52。

关于java - 如果未对金额应用任何操作,BigDecimal.doubleValue() 的准确性如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31297716/

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