前に述べたように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
、ただし、その質問を簡単にするために、私はその主題にあまり深く入り込みません。122
1.22