问题描述
根据BigDecimal
值的来源/用途,首先检查刻度是否小于等于0可能会更快。如果是,那么从数学意义上讲,它绝对是整数。如果是> 0,则它 可能
仍是一个整数值,并将需要更昂贵的测试。
解决方法
任何人都可以推荐一种 有效的 方法来确定a是否BigDecimal
为数学意义上的整数吗?
目前,我有以下代码:
private boolean isIntegerValue(BigDecimal bd) {
boolean ret;
try {
bd.toBigIntegerExact();
ret = true;
} catch (ArithmeticException ex) {
ret = false;
}
return ret;
}
…但是希望在必要时避免创建对象的开销。以前,我使用bd.longValueExact()
的BigDecimal
是如果内部使用紧凑的表示形式则可以避免创建对象,但是如果值太大而无法容纳很长的对象,则显然会失败。
任何帮助表示赞赏。