[ Java ] String.Format は小数点の末端の桁は四捨五入される。切り捨てるには?

Pocket

ここでは、小数点の桁揃えについて String.Format の動作確認を行っております。結論から述べますと、小数点の末端の桁は四捨五入されて、丸められました。検証サンプルとともに、四捨五入ではなく、切り捨てや切り上げを行うサンプルコードも掲載してあります。

スポンサーリンク

String.Format は小数点の末端の桁は四捨五入される

以下がサンプルコードになります。詳細はサンプル内のコメントを参照ください。

float halfUp = 99.455f; // 小数点第3位が5
float halfDn = 99.454f; // 小数点第3位が4
        
// 四捨五入されて指定の桁数にまるめられる模様
String strUp = String.format("%.2f", halfUp); // 99.46
String strDn = String.format("%.2f", halfDn); // 99.45

// BigDecimal 型に変換
BigDecimal bd = new BigDecimal(halfUp);

// 小数点第3位で切り捨てて総数点2桁にまるめる
bd = bd.setScale(2, BigDecimal.ROUND_FLOOR); 
String.format("%.2f", bd); // 99.45

// BigDecimal型の場合、文字列への出力は以下のようにも記述できる、
// str = bd.setScale(2, BigDecimal.ROUND_FLOOR).toString();
// str = bd.setScale(2, BigDecimal.ROUND_FLOOR).toPlainString();

[ BigDecimal ] toString と toPlainString メソッドの違いは?

toStirng メソッドは、桁数の大きな値の場合に、「1.23E10」 や 「1E-10」 のように指数表現で出力されてしまいます。あまり期待する動作ではないことも多いと思います。
一方、toPlainString メソッドは指数表現で出力されることがなく、桁数の大きな値でも「0.0000000000000000001」 のように出力されます。

 

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *