前に述べたようにBigDecimal、倍精度でより良い精度が必要な場合は良いオプションです。
sで丸めを行う良い方法がありますBigDecimal。基本的にBigDecimalインスタンスのスケールを指定する必要があります。このサンプル コードを見てください。
BigDecimal decimalOne = new BigDecimal(0.1950);
BigDecimal decimalTwo = decimalOne.setScale(2, BigDecimal.ROUND_HALF_DOWN);
BigDecimal decimalThree = decimalOne.setScale(4, BigDecimal.ROUND_HALF_DOWN);
System.out.println("decimalOne: " + decimalOne);
System.out.println("decimalTwo: " + decimalTwo);
System.out.println("decimalThree: " + decimalThree);
Java 7 は次のように出力します。
decimalOne: 0.195000000000000006661338147750939242541790008544921875
decimalTwo: 0.20
decimalThree: 0.1950
BigDecimalインスタンスは不変であるため、結果setScaleを新しいインスタンスに割り当てる必要があることに注意してください(decimalOne変更されません)。
多くの金融システムdoubleでは、 は通貨情報の格納には使用されません。代わりに、特定の精度の型が使用されます。longたとえば、精度 2 の場合、値100は1.00、ただし、その質問を簡単にするために、私はその主題にあまり深く入り込みません。1221.22