利用のjava.math.MathContext
-
08-06-2019 - |
質問
最近、私の理解の利用 java.math.MathContext したが理解します。を使用して丸めに java.math.BigDecimal
.そしてないのはなぜでの小数桁も仮数部です。
からのAPIドキュメント、私は知ることで、標準の指定 ANSI X3.274-1996
や ANSI X3.274-1996/AM 1-2000
仕様がいけなかったためしておくと良いでしょう。
教えてくださいごうはず。
解決
@jatan
ります。それはそうですよね。ありがとうございます。説明いMathContextの文脈のBigDecimal#丸い方法です。
あの特徴 BigDecimal.round()
対 その他 BigDecimal
方法。すべての場合について MathContext
指定番号の桁に丸めます。基本的には、部品毎 MathContext
.が精密ではありま RoundingMode
.
を精密に再度指定数の有効桁を表します。で指定した場合 123
数値として、2重要な桁をつけよう 120
.する可能性があるそうたくさんの科学表記です。●
123
う 1.23e2
科学表記です。●だい2桁にしま 1.2e2
, や 120
.点数を削減することによ桁の減少、の精度までの日数を指定します。
の RoundingMode
ファイルを処理する必要がありますの損失ます。再利用の例では、ご利用の場合 123
している、いちごグループ2桁までの減減減精度。と RoundingMode
の HALF_UP
(デフォルトのモード)、 123
となりま 120
.と RoundingMode
の CEILING
, を取得するでしょう 130
.
例えば:
System.out.println(new BigDecimal("123.4",
new MathContext(4,RoundingMode.HALF_UP)));
System.out.println(new BigDecimal("123.4",
new MathContext(2,RoundingMode.HALF_UP)));
System.out.println(new BigDecimal("123.4",
new MathContext(2,RoundingMode.CEILING)));
System.out.println(new BigDecimal("123.4",
new MathContext(1,RoundingMode.CEILING)));
出力:
123.4
1.2E+2
1.3E+2
2E+2
きの精度と丸めモードの影響が出力されます。
他のヒント
のための丸めでの小数部のBigDecimal、チェックアウトの BigDecimal.setScale(int newScale, int roundingMode)
方法。
E.g.変数と桁数小数点以下を二桁、丸め:
BigDecimal original = new BigDecimal("1.235");
BigDecimal scaled = original.setScale(2, BigDecimal.ROUND_HALF_UP);
の結果、このBigDecimalの値1.24が挑ル)
思ここでは、一部の例です。まだ見つかりして過去の答えが見を有してお者に誤解を与えるか 桁 数 小数点の位置.そして、などのコンテクスト:
MathContext MATH_CTX = new MathContext(3, RoundingMode.HALF_UP);
このコード:
BigDecimal d1 = new BigDecimal(1234.4, MATH_CTX);
System.out.println(d1);
このアドベンチャーワールド、この結果は 1.23E+3
していった。最初の桁には123...
そこの場合:
BigDecimal d2 = new BigDecimal(0.000000454770054, MATH_CTX);
System.out.println(d2);
ご人数 は四捨五入に3ヶ所の後にカンマで区切 -誰できない直感的価値を重視す.これを切り捨て 最初の3桁, が、この場合は"4 5 4".で上記のコード結果 4.55E-7
な 0.000
していきます。
このような例:
BigDecimal d3 = new BigDecimal(0.001000045477, MATH_CTX);
System.out.println(d3); // 0.00100
BigDecimal d4 = new BigDecimal(0.200000477, MATH_CTX);
System.out.println(d4); // 0.200
BigDecimal d5 = new BigDecimal(0.000000004, MATH_CTX);
System.out.println(d5); //4.00E-9
この明らかなものの関連する例ものを用いる...
について知っておきましょ理解で正確にいるように聞こえるよ期待のMathContextを最小限に抑えた多くの桁数は小数点以下.そうはいかないようです。を指定しますどのように多くの桁数を持つ 合計.だとするかどうかを指定します3桁名がこの記事を評価していいかを取得します。
例えば、この:
System.out.println(new BigDecimal("1234567890.123456789",
new MathContext(20)));
System.out.println(new BigDecimal("1234567890.123456789",
new MathContext(10)));
System.out.println(new BigDecimal("1234567890.123456789",
new MathContext(5)));
出力は、このようになります:
1234567890.123456789
1234567890
1.2346E+9
いしたものとみなされます。実際にこのオンラインの例では、記載の利用 MathContext
丸の金額/数に格納されBigDecimal.
例えば、
の場合 MathContext
が設定されてい precision = 2
や rounding mode = ROUND_HALF_EVEN
BigDecimal Number = 0.5294
, は、 丸 へ 0.53
していかないといけないと思いますので新しい技術や使用する丸めます。しかかりませんでした悪夢で四捨五入でmentissaの番号です。
例えば、
Number = 1.5294
は四捨五入 1.5
Number = 10.5294
は四捨五入 10
Number = 101.5294
は四捨五入 100
....など
この行動かされる丸めて精度=2).
そうすると一部の論理から塗るというか最初の二桁としての精度は2)の数を出力して、0を追加するのです。桁などunrounded額精算の例101.5294...)