abd*_*nno 5 java precision double soap bigdecimal
我需要发送一个值作为“ double ”,但是我是:
现在我知道,当您对双精度值应用算术运算时,双精度值会失去精度,但是,如果我尝试基于 BigDecimal 按原样发送双精度值,例如(我相信)上述情况,我可能会得到什么。
这很重要,因为我必须以这种方式通过 SOAP 发送货币值 - 没有其他方式。
我还有这样的场景:使用String创建BigDecimal,然后在其上调用doubleValue() 。在这种情况下我能得到什么?
编辑:示例代码:
long amountInCents = 1852;
BigDecimal amountInWholeUnits = BigDecimal.valueOf(amountInCents).scaleByPowerOfTen(-2);
double amountToSend = amountInWholeUnits.doubleValue();
Run Code Online (Sandbox Code Playgroud)
至于金额以字符串形式提供的情况:
double amountToSend = new BigDecimal("18.52").doubleValue();
Run Code Online (Sandbox Code Playgroud)
现在我有了示例代码,我只是想我可以测试和查看,所以我做了一个for循环并使用了System.out.println:到目前为止一切都很好,值是正确的,所以我相信发送时会是相同的通过 SOAP。如果我错了,请纠正我。
由于一美分等于一美元的 1/100,并且由于数字 1/100 或0.01 不能精确地表示为二进制浮点数,因此会发生一些轻微的精度损失。在您的 18.52 美元的特定示例中,结果double将保持最接近double18.52 的值,但它不会完全等于 18.52。
| 归档时间: |
|
| 查看次数: |
4075 次 |
| 最近记录: |