1。BigDecimalの紹介
Bigdecimalは、精度の整数非スケール値と32ビット整数スケールで構成されています。ゼロまたは正の場合、スケールは小数点後の数字数です。負の数の場合、数の非スケーリング値に10の負unscaledValue × 10-scaleパワーを掛けます。
2。BigDecimalの導入
数値値の高精度計算を必要とする銀行や金融などのJavaプログラミング言語を使用する場合、特にフローティングポイントデータを処理する場合、一般的なint 、 long 、 float 、およびdoubleタイプの代わりにBigDecimalとBigInteger使用します。
最初に、計算と印刷の結果に基本的なデータ型double使用するというコードデモを見てみましょう。
public class mainclass {public static void main(string [] args){system.out.println(0.02+0.01); System.out.println(0.05+0.01); }}結果は次のとおりです。
0.030.06000000000000000000005
問題は、なぜ2番目の結果を持つデータが表示されるのですか?基本的な理由は、コンピューターがバイナリであり、バイナリが浮動小数点数を正確に表すことができないことです。 CPUが「マンドレルと指数」メソッド(科学表記法)を使用して浮動小数点数を表現する場合、特定のエラーがあります。したがって、データの精度要件が比較的高い場合、計算速度はわずかに遅くなりますが、Bigdecimalクラスを使用する必要があります。
3.最大の使用
Bigdecimalオブジェクトを作成するには、Constructorとpublic Static Method( BigDecimal.valueOf )を作成するには、2つの方法があります。 2つのポイントに注意する必要があります。
1.コンストラクターには、基本的なデータ型と文字列をパラメーターとして使用する2つのフォームが含まれています。後者は、 new BigDecimal(Double.valueOf(0.09))のような推奨されます。あなたはそれを試すことができます。 System.out.println(new BigDecimal(0.06).toString());ステートメントは:0.05999999999999999977979553950749686919152736663818359375
2。10進数がログを印刷する場合、または基本データ型に変換する場合、シンプルで粗いtoString()の代わりに、 doubleValue()などのパブリックメソッドxxxValue()を使用してみてください。
4。大きな丸めモード
データベースは高精度の浮動小数点数を保存しますが、通常、2〜3小数などのアプリケーションに表示されたときに10進数桁の数を制限する必要があります。現時点では、SetScale( int newScale, int roundingMode )関数を使用する必要があります。 BigDecimalのpublic静的変数として、丸めモード(丸めモード)には多くの操作ルールがあり、8つのパブリックタイプがあります。ここに説明があり、公式の文書もそれを紹介します。
1。round_up
ゼロから離れています。ゼロ以外の部品を放棄し、ゼロ以外の部品に隣接する1つの数値を追加します。
2。Round_Down
ゼロに近い方向に丸。ゼロ以外の部品を放棄すると同時に、ゼロ以外の部品に追加して動作を傍受することにより、隣接する1つの部品の数が破棄されません。
3。round_ceiling
無限の方向に丸。正の数の場合、丸めの結果はround_upと同じです。負の数の場合、丸め結果はround_downと同じです。注:このモードでは、値のサイズが削減されません。
4。Round_floor
負の無限の方向に丸。正の数の場合、丸めの結果はround_downと同じです。負の数の場合、丸めの結果はround_upと同じです。注:このモードでは、値のサイズが増加しません。
5。Round_Half_up
「最も近い」数値への丸めは、2つの隣接する数値までの距離が等しい場合、上向きの丸めの丸めモードです。部品が破棄された場合、> = 0.5、丸め動作はround_upと同じです。それ以外の場合、丸め動作はround_downと同じです。このパターンは、私たちがしばしば「丸み」と呼んでいるものです。
6。Round_Half_Down
「最も近い」数値に丸くすることは、2つの隣接する数値までの距離が等しい場合、丸めの丸めモードです。破棄された部分> 0.5の場合、丸め動作はround_upと同じです。それ以外の場合、丸め動作はround_downと同じです。このモデルは、私たちがしばしば「丸み」と呼んでいるものです。
7。Round_Half_even
「最も近い」数に丸くなります。2つの隣接する数値までの距離が等しい場合、隣接する偶数の数値が丸くなります。パーツの左側の奇数数が破棄されている場合、丸め動作はround_half_upと同じです。偶数の場合、丸め動作はround_half_downと同じです。注:この丸めモードは、一連の計算を繰り返したときの蓄積エラーを最小限に抑えます。この丸めモードは、「銀行の丸め方」とも呼ばれ、主に米国で使用されています。ラウンド6から6、5つに2つの状況。前のものが奇数の場合、それは位置に入ります。そうしないと、放棄されます。
8。Round_Unn必要
アサーションリクエストの操作には正確な結果があるため、丸めは必要ありません。正確な結果を得る操作にこの丸めモードが指定されている場合、補助金がスローされます。
以下では、異なる丸めモードで数値計算結果を説明する例を示し、1つの小数を維持します。
5。概要
上記は、JavaのBigDecimalと8つの丸めモードの導入全体です。この記事の内容が、Javaを学習するすべての人に役立つことを願っています。