首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较BigDecimal值和双精度值等于两个小数位

比较BigDecimal值和双精度值等于两个小数位
EN

Stack Overflow用户
提问于 2017-07-13 03:31:26
回答 2查看 6.1K关注 0票数 4

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

我是否应该将BigDecimal转换为双精度,然后进行比较

代码语言:javascript
复制
Math.abs(myBigDecimal.doubleValue() - apiDouble) >= .01

或者,这种方法有问题吗?也许我应该将double转换成BigDecimal,然后再进行比较?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-13 03:40:24

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

票数 5
EN

Stack Overflow用户

发布于 2017-07-13 04:33:01

移位所需的小数位数将两个双精度数乘以100,根据您的喜好使用Math.ceil或Math.floor去掉其余的小数位数:

代码语言:javascript
复制
Math.ceil(myBigDecimal.doubleValue()*100) == Math.ceil(apiDouble*100)

这等同于不进行舍入的截断。如果你担心四舍五入,乘以1000,转换为长整型除以10,然后进行比较。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45066101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档