确定 BigDecimal
是否是数学意义上的整数值的 有效 方法是什么?
目前我有以下代码:
private boolean isIntegerValue(BigDecimal bd) {
boolean ret;
try {
bd.toBigIntegerExact();
ret = true;
} catch (ArithmeticException ex) {
ret = false;
}
return ret;
}
…但希望尽可能避免对象创建开销。
以前我使用的是 bd.longValueExact()
如果 BigDecimal
在内部使用其紧凑表示,这将避免创建对象,但如果值太大而无法放入 long 显然会失败。
原文由 Adamski 发布,翻译遵循 CC BY-SA 4.0 许可协议
根据您的
BigDecimal
值的来源/用法,首先检查比例是否 <= 0 可能会更快。如果是,那么它绝对是数学意义上的整数值。如果它 >0,那么它 可能 仍然是一个整数值,并且将需要更昂贵的测试。