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