ここにいくつかの例を追加します。以前の回答ではそれらを見つけられませんでしたが、小数点以下の桁数で有効数字を誤解させる可能性がある人にとっては便利だと思います。そのようなコンテキストがあると仮定しましょう:
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
これが明白であることを願っていますが、関連する例が役に立ちます...