ここでは、小数点の桁揃えについて 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」 のように出力されます。