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