2013-02-12 23 views
8

null値を許可するBigDecimalの基本操作を行うBigDecimalライブラリはありますか?null値を許可するBigDecimal用のJava数学ライブラリ

Nullは、数学的な目的で0として扱う必要があります。

null値の可能性のあるすべてのnullチェックを実行する必要はありません。

データベース、アプリケーション、またはビューでnull値を許可せず、すべてをnew BigDecimal(0)で初期化するか、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); 
} 

答えて

13

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

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

+1

+1のBigDecimal.Zero。決してそれをチェックしないでください。 – djmj

+0

与えられた答えで、私はデータベースの10進数のNULL値を許可しないことに決めました。私はすでに長い間許されるかどうかを考えていましたが、ヌル状態を追跡することはコーディング時間の無駄でした。 – djmj

+0

GUI目的で浮動小数点比較関数を作成するためのオーバーヘッドが小さいことは公正な取引です。 – djmj

5

は、私はnullをチェックするライブラリのポイントが表示されていないと思います。確かに、ライブラリはNPEを投げませんが、呼び出し側は最終的にそれをチェックする必要があります。あなたの上記の乗客は何をするつもりですか?それは単に出力を使用することはできません。戻り値が何らかの点でnullであるかどうかをチェックしてから、値で何かできるようにする必要があります。

また、私が今までに書いたアプリケーションでは、nullはゼロとは大きく異なります。 nullをゼロとして扱うものは使用したくありません。

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

+0

をその非常に便利なデータはnullを確認できた場合に表示、表示します他の情報をユーザに提供する。私は現在、すべてがヌル値をチェックされているDAOレイヤーでこれを使用していません。現時点では、ビュー関連のデータのみをテストしています。 – djmj

+0

ああ。それで、あなたのようないくつかの静的メソッドが、あなたにいくつかの問題を救えるかもしれません。ヌルをゼロとして扱うBigDecimalライブラリを見つけたり、引数の1つがnullの場合にNPEをスローしたりしないことは、多分幸いでしょう。 – Kyle

+1

あなたはどこでもゼロに変換します。そこにヌルを置くだけではいけません。 –

6

私は同様の問題を抱えていました(ただし、データベースには関係しませんが、恐らくnullのBigDecimalsをいくつか要約するだけで済みます)。 Javaの8で同じ

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; 
} 

:任意のライブラリを見つけられませんでしたので、次の関数を自分で書かなければならなかったJSFでは

public static BigDecimal add(BigDecimal... addends) { 
    if (addends == null) { 
     return BigDecimal.ZERO; 
    } 
    return Arrays.stream(addends) 
      .filter(Objects::nonNull) 
      .reduce(BigDecimal.ZERO, BigDecimal::add); 
} 
関連する問題