BigDecimalインスタンスが別のBigDecimalインスタンスの倍数であるかどうかを確認する必要がありました。私はJava1.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
整数の場合にのみ丸めが不要であると想定しています。この仮定は正しいですか?
Edit
Incorporated by Landoは、商のスケールを明示的にに設定し0
ます。そうしないと、次の呼び出しが誤って返されtrue
ます。
isMultipleOf(new BigDecimal("10.25"), new BigDecimal("5"));
編集
JUnitテストを書きましたが、とが両方であるという特殊なケースに対処する必要があることがわかりmultiple
ましbase
た0
。そこで、上記のコードに同等性のテストを追加しました。