Java 四舍五入 五舍六入

四舍五入 保留三位小数
  • double a = 12.2345;
  • double b = (double)(Math.round(a*1000))/1000;
  • System.out.println(b);
  • DecimalFormat df = new DecimalFormat("0.000");
  • System.out.println(df.format(b));
 
Java代码  收藏代码
  1.     Double dd=0.125;  
  2. try {  
  3.     DecimalFormat df=new DecimalFormat("#.##");   
  4.     System.out.println(df.format(dd));  
  5. catch (RuntimeException e) {  
  6.     e.printStackTrace();  
  7. }  
  8.   
  9. MathContext v = new MathContext(2,RoundingMode.HALF_DOWN);     
  10.       BigDecimal a = new BigDecimal("0.875",v);     
  11.       System.out.println(a);     
  12.         
  13.       float a1 = 123.2354f;   
  14.       float b = (float)(Math.round(a1*100))/100;   
  15.       System.out.println(b);  
  16.         
  17.         
  18.       float ft = 134.3445f;   
  19.       int scale = 2;//设置位数   
  20.       int roundingMode = 4;//表示四舍五入,可以选择其他舍值方式,例如去尾,等等.   
  21.       BigDecimal bd = new BigDecimal((double)ft);   
  22.       bd = bd.setScale(scale,roundingMode);   
  23.       ft = bd.floatValue();   
  24.       System.out.println(ft);  

结果为: 
0.12 
0.87 
123.24 
134.34 

结论: 
  只有第3,4 种方法实现了真正的四舍五入, 1,2种方法到是“五舍六入” 
  至于为什么会这样?java是有解释的,可以查查看,匆忙写下这边就不在解释了。
 
Java代码  收藏代码
  1. package test;  
  2.   
  3. import java.math.BigDecimal;  
  4. import java.math.MathContext;  
  5. import java.math.RoundingMode;  
  6. import java.text.DecimalFormat;  
  7.   
  8. public class testFormat {  
  9.     public static void main(String[] args) {  
  10.         //第1种  
  11.         Double dd = 0.125;  
  12.         try {  
  13.             DecimalFormat df = new DecimalFormat("#.##");  
  14.             System.out.println(df.format(dd));  
  15.         } catch (RuntimeException e) {  
  16.             e.printStackTrace();  
  17.         }  
  18.           
  19.         //第2种  
  20.         MathContext v = new MathContext(2, RoundingMode.HALF_DOWN);  
  21.         BigDecimal a = new BigDecimal("0.875", v);  
  22.         System.out.println(a);  
  23.           
  24.         //第3种  
  25.         float a1 = 123.2354f;  
  26.         float b = (float) (Math.round(a1 * 100)) / 100;  
  27.         System.out.println(b);  
  28.           
  29.         //第4种  
  30.         float ft = 134.3445f;  
  31.         int scale = 2;// 设置位数  
  32.         int roundingMode = 4;// 表示四舍五入,可以选择其他舍值方式,例如去尾,等等.  
  33.         BigDecimal bd = new BigDecimal((double) ft);  
  34.         bd = bd.setScale(scale, roundingMode);  
  35.         ft = bd.floatValue();  
  36.         System.out.println(ft);  
  37.           
  38.         //第5种  
  39.         MathContext v2 = new MathContext(2, RoundingMode.HALF_UP);  
  40.         BigDecimal a2 = new BigDecimal("0.875", v2);  
  41.         System.out.println(a2);  
  42.           
  43.     }  
  44.   
  45. }  

第2种方法到是“五舍六入” 是因为传入的参数不对,所以出现“五舍六入” ,四舍五入见第5种方法
posted @ 2013-10-11 10:34  刘尊礼  阅读(1777)  评论(0)    收藏  举报