あなたが答えてくれてありがとう
@jatan。それは理にかなっている。 BigDecimal#roundメソッドの文脈でMathContextを説明してください。
についてBigDecimal.round()
対他BigDecimal
方法の特別なものは何もありません。すべての場合において、MathContext
は有効桁数と丸め技法を指定します。基本的には、すべてMathContext
の2つの部分があります。精度があり、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
あなたは精度と丸めモードの両方が出力に影響を及ぼしていることがわかります。
2有効数字を使用して '123.4 'をフォーマットする方法は、' 120'のような文字列になりますか?末尾のゼロは、末尾の10進数がない限り、重要な数字の検索に従来は含まれていないので、2桁の有効数字(「1.2E2」)です。そして、私の目的のために、フォーマットされる数字が '103.4 'だった場合、結果の' 100'の数字に2つのシグネチャがあるとは言えません。私はちょうど簡単/清潔な数字の表示をしたい。 – hepcat72