私のアプリでは、数値をBigDecimalとして処理し、NUMBER(15,5)として格納します。ここで、BigDecimal値が列に適合するかどうかをJavaで適切にチェックする必要があります。これにより、SQLを実行したり、例外をキャッチしたり、ベンダーのエラーコードを確認したりせずに、適切なエラーメッセージを生成できます。私のデータベースはOracle10.3であり、そのようなエラーはエラー1438を引き起こします。
少しグーグルした後、そのようなコードが見つからなかったので、自分でコードを思いついた。しかし、私はこのコードに本当に満足していません...単純ですが、同時にその正しさを疑うほど単純です。私はそれを多くの値、ランダムな値、境界でテストしましたが、うまくいくようです。しかし、私は数字が本当に苦手なので、もっと堅牢で十分にテストされたコードが欲しいです。
//no constants for easier reading
public boolean testBigDecimal(BigDecimal value) {
if (value.scale() > 5)
return false;
else if (value.precision() - value.scale() > 15 - 5)
return false;
else
return true;
}
編集:最近のテストでは、スケール外の数値の例外は発生せず、静かに丸められました。これらの最初のテストを行ったときとそうでないときの違いはわかりません。アプリケーションは財務的であり、丸め/切り捨ては明示的である必要があるため(BigDecimalメソッドを使用)、このような丸めは受け入れられません。例外はさておき、このテスト方法では、有効数字以外の桁であっても、必要な精度に対して数値が大きすぎないことを確認する必要があります。明確化が遅れてすみません。
御時間ありがとうございます。
私はまだこの質問に興味があります。私のコードはまだ実行されており、正当性や失敗の状況の「証拠」、またはこの種のテストの標準コードがありません。
だから、私はそれに賞金をかけています、うまくいけばこれらのいずれかを手に入れます。