gpt4 book ai didi

java - 检查 BigDecimal 是否是 Java 中的整数

转载 作者:IT老高 更新时间:2023-10-28 20:39:42 28 4
gpt4 key购买 nike

确定 BigDecimal 是否为数学意义上的整数值的有效方法是什么?

目前我有以下代码:

private boolean isIntegerValue(BigDecimal bd) {
boolean ret;

try {
bd.toBigIntegerExact();
ret = true;
} catch (ArithmeticException ex) {
ret = false;
}

return ret;
}

...但希望尽可能避免创建对象的开销。

以前我使用 bd.longValueExact() 如果 BigDecimal 在内部使用其紧凑表示,则可以避免创建对象,但如果值为太大了,放不下。

最佳答案

编辑:从 Java 8 开始,stripTrailingZeroes() 现在占零

BigDecimal stripTrailingZeros doesn't work for zero

所以

private boolean isIntegerValue(BigDecimal bd) {
return bd.stripTrailingZeros().scale() <= 0;
}

现在完全好了。


如果使用部分答案中提到的scale()stripTrailingZeros() 解决方案,应注意归零。零总是一个整数,无论​​它有什么比例,并且 stripTrailingZeros() 不会改变零 BigDecimal 的比例。

所以你可以这样做:

private boolean isIntegerValue(BigDecimal bd) {
return bd.signum() == 0 || bd.scale() <= 0 || bd.stripTrailingZeros().scale() <= 0;
}

关于java - 检查 BigDecimal 是否是 Java 中的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1078953/

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