26

null値を許可するBigDecimalの基本操作を備えたBigDecimalライブラリはありますか?

Null は、数学的な目的で 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);
}
4

4 に答える 4

23

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

に関してはnew BigDecimal(0):いいえ、使用してBigDecimal.ZEROください。

于 2013-02-12T01:11:52.847 に答える
20

私は同様の問題を抱えていました(ただし、データベースとは関係ありませんが、いくつかの nullable を合計する必要がありました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);
}
于 2015-03-20T14:19:54.297 に答える
6

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

また、これまでに作成したどのアプリケーションでも、null は 0 とは大きく異なります。null をゼロとして扱うものは使いたくありません。

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

于 2013-02-12T01:10:03.580 に答える