我需要检查一个 BigDecimal 实例是否是另一个 BigDecimal 实例的倍数。由于我仅限于 Java 1.4,因此无法使用BigDecimal.remainder(...)
.
我想出了以下代码:
/**
* Returns <code>true</code> if <code>multiple</code> is a multiple of <code>base</code>.
*
* @param multiple
* @param base
* @return
*/
public static boolean isMultipleOf(final BigDecimal multiple, final BigDecimal base)
{
if (multiple.compareTo(base) == 0)
return true;
try
{
multiple.divide(base, 0, BigDecimal.ROUND_UNNECESSARY);
return true;
}
catch(ArithmeticException e)
{
return false;
}
}
该代码假定仅当multiple
除以的商base
是整数时才不需要舍入。这个假设正确吗?
编辑
合并了 Lando 的提示,将商的比例显式设置为0
. 否则,以下调用将错误地返回true
:
isMultipleOf(new BigDecimal("10.25"), new BigDecimal("5"));
编辑写了一个 JUnit 测试,发现我必须处理这两个和都是
的特殊情况。所以我在上面的代码中添加了一个相等性测试。multiple
base
0