Null値を許可するBigDecimalの基本操作を備えたBigDecimalライブラリはありますか?
数学的な目的のため、ヌルは0として扱われるべきです。
可能なnull値のすべてのnullチェックを実行する必要はありません。
データベース、アプリケーション、またはビューでnull値を許可せず、new BigDecimal(0)
を使用してすべてを初期化するか、null許容値の使用ごとにnullチェックを実行します。
何かのようなもの:
public static BigDecimal add(final BigDecimal value, final BigDecimal augend)
{
if (value == null)
return augend;
else if (augend == null)
return value;
else
return value.add(augend);
}
public static BigDecimal multiply(final BigDecimal value, final BigDecimal multiplicand)
{
if (value == null || multiplicand == null)
return null;
return value.multiply(multiplicand);
}
コーディングを保存してください。データベースでnull値を許可しないでください。デフォルト値をゼロにします。
new BigDecimal(0)
の場合:いいえ、BigDecimal.ZERO
を使用します。
私は同様の問題を抱えていました(データベースとは関係ありませんが、nullの可能性があるBigDecimalをいくつか合計する必要がありました)。ライブラリが見つからなかったため、次の関数を自分で作成する必要がありました。
public static BigDecimal add(BigDecimal... addends) {
BigDecimal sum = BigDecimal.ZERO;
if (addends != null) {
for (BigDecimal addend : addends) {
if (addend == null) {
addend = BigDecimal.ZERO;
}
sum = sum.add(addend);
}
}
return sum;
}
Java 8でも同じ:
public static BigDecimal add(BigDecimal... addends) {
if (addends == null) {
return BigDecimal.ZERO;
}
return Arrays.stream(addends)
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
ライブラリがnullをチェックするポイントがわからないと思います。もちろん、ライブラリはNPEをスローしませんが、呼び出し元は最終的にNPEをチェックする必要があります。あなたの上記の掛け算の発信者は何をするつもりですか?出力だけを使用することはできません。値を処理する前に、ある時点で戻り値がnullかどうかを確認する必要があります。
また、私がこれまでに作成したどのアプリケーションでも、ヌルはゼロとは大きく異なります。 nullをゼロとして処理するものを使用したくありません。
DBでnullが許可されないことが要件である場合、DBに書き込む前に、DAOレイヤーでnullをチェックします。