繁体   English   中英

比较BigDecimal值和double值是否等于两个小数位

[英]Compare that BigDecimal value and double value are equal to two decimal places

我正在使用一个返回双精度值的API。 我需要将该值与BigDecimal值进行比较,以等于两位小数位。

我应该将BigDecimal转换为double然后比较

Math.abs(myBigDecimal.doubleValue() - apiDouble) >= .01

还是这种方法有问题? 也许我应该将double转换为BigDecimal,然后进行比较?

否。尽管IEEE double具有保护位,但它不能精确表示十进制值。 使用舍入将double转换为BigDecimal,然后使用compareTo()。 请注意,equals()考虑了小数位,因此compareTo()更安全。 您可能还需要舍入BigDecimal。

移位所需的小数位数,将它们的双精度数乘以100,使用Math.ceil或Math.floor(如您所愿)以除去其余的小数位数:

Math.ceil(myBigDecimal.doubleValue()*100) == Math.ceil(apiDouble*100)

这等效于不舍入而截断。 如果您担心舍入,请乘以1000,将长除数除以10并进行比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM