小数点以下n桁で四捨五入……みたいなことをするサンプル。

ソースコード


import java.math.*;
import java.text.*;
 
public class RoundHalfUp {
 
  public static void main(String[] args) {
    
    double[] testcase = {
      -1.123456789, -1.0987654321, -0.6543210987, -0.5432198, -0.421,
      -0.0, 0.0,
      0.4000000000001, 0.599999999991, 0.600004, 1.0000005, 1.1};
    
    System.out.println("----- BigDecimal.ROUND_HALF_UP -----");
    for(int i=0; i<testcase.length; i++){
      System.out.println(
      f(testcase[i]) + " -> " + f(round(testcase[i])));
    }
  }
 
  private static String f(double d){
    return df.format(d);
  }
 
  private static DecimalFormat df =
    new java.text.DecimalFormat("###.#############");
 
  private static double round(double d){
    int newScale = 6; // 小数点以下6桁まで求める
    BigDecimal bd = new BigDecimal(d);
    BigDecimal bd2 = bd.setScale(newScale, BigDecimal.ROUND_HALF_UP);
    double d2 = bd2.doubleValue();
    return d2;
  }
 
}

出力結果


----- BigDecimal.ROUND_HALF_UP -----
-1.123456789 -> -1.123457
-1.0987654321 -> -1.098765
-0.6543210987 -> -0.654321
-0.5432198 -> -0.54322
-0.421 -> -0.421
-0 -> 0
0 -> 0
0.4000000000001 -> 0.4
0.599999999991 -> 0.6
0.600004 -> 0.600004
1.0000005 -> 1.000001
1.1 -> 1.1

類似: Javaによる小数の切り捨て/切り上げ/四捨五入/intへのキャストなど

参考: 小数点第2位以下で四捨五入する / Java(SE) API 逆引き辞典

tags: zlashdot Java Java

Posted by NI-Lab. (@nilab)