我正在使用一个返回双精度值的API。我需要将该值与BigDecimal值进行比较,以便与两个小数位相等。
我是否应该将BigDecimal转换为双精度,然后进行比较
Math.abs(myBigDecimal.doubleValue() - apiDouble) >= .01或者,这种方法有问题吗?也许我应该将double转换成BigDecimal,然后再进行比较?
发布于 2017-07-13 03:40:24
不是的。虽然IEEE double有保护位,但它不能精确地表示十进制值。使用舍入将double转换为BigDecimal,然后使用compareTo()。请注意,equals()考虑了小数位置,因此compareTo()更安全。您可能还需要对BigDecimal进行舍入。
发布于 2017-07-13 04:33:01
移位所需的小数位数将两个双精度数乘以100,根据您的喜好使用Math.ceil或Math.floor去掉其余的小数位数:
Math.ceil(myBigDecimal.doubleValue()*100) == Math.ceil(apiDouble*100)这等同于不进行舍入的截断。如果你担心四舍五入,乘以1000,转换为长整型除以10,然后进行比较。
https://stackoverflow.com/questions/45066101
复制相似问题