web-dev-qa-db-ja.com

java null値を許可するBigDecimalの数学ライブラリ

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);
}
14
djmj

コーディングを保存してください。データベースでnull値を許可しないでください。デフォルト値をゼロにします。

new BigDecimal(0)の場合:いいえ、BigDecimal.ZEROを使用します。

16
user207421

私は同様の問題を抱えていました(データベースとは関係ありませんが、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);
}
12
Bunarro

ライブラリがnullをチェックするポイントがわからないと思います。もちろん、ライブラリはNPEをスローしませんが、呼び出し元は最終的にNPEをチェックする必要があります。あなたの上記の掛け算の発信者は何をするつもりですか?出力だけを使用することはできません。値を処理する前に、ある時点で戻り値がnullかどうかを確認する必要があります。

また、私がこれまでに作成したどのアプリケーションでも、ヌルはゼロとは大きく異なります。 nullをゼロとして処理するものを使用したくありません。

DBでnullが許可されないことが要件である場合、DBに書き込む前に、DAOレイヤーでnullをチェックします。

5
Kyle