`
fly533
  • 浏览: 108067 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

java 四舍五入的问题--五舍六入

    博客分类:
  • java
阅读更多
      Double dd=0.125;
		try {
			DecimalFormat df=new DecimalFormat("#.##"); 
			System.out.println(df.format(dd));
		} catch (RuntimeException e) {
			e.printStackTrace();
		}
		
		MathContext v = new MathContext(2,RoundingMode.HALF_DOWN);   
        BigDecimal a = new BigDecimal("0.875",v);   
        System.out.println(a);   
        
        float a1 = 123.2354f; 
        float b = (float)(Math.round(a1*100))/100; 
        System.out.println(b);
        
        
        float ft = 134.3445f; 
        int scale = 2;//设置位数 
        int roundingMode = 4;//表示四舍五入,可以选择其他舍值方式,例如去尾,等等. 
        BigDecimal bd = new BigDecimal((double)ft); 
        bd = bd.setScale(scale,roundingMode); 
        ft = bd.floatValue(); 
        System.out.println(ft);


结果为:
0.12
0.87
123.24
134.34

结论:
  只有第3,4 种方法实现了真正的四舍五入, 1,2种方法到是“五舍六入”
  至于为什么会这样?java是有解释的,可以查查看,匆忙写下这边就不在解释了。
分享到:
评论
1 楼 fly533 2011-11-02  

package test;

import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.text.DecimalFormat;

public class testFormat {
	public static void main(String[] args) {
		//第1种
		Double dd = 0.125;
		try {
			DecimalFormat df = new DecimalFormat("#.##");
			System.out.println(df.format(dd));
		} catch (RuntimeException e) {
			e.printStackTrace();
		}
		
		//第2种
		MathContext v = new MathContext(2, RoundingMode.HALF_DOWN);
		BigDecimal a = new BigDecimal("0.875", v);
		System.out.println(a);
		
		//第3种
		float a1 = 123.2354f;
		float b = (float) (Math.round(a1 * 100)) / 100;
		System.out.println(b);
		
		//第4种
		float ft = 134.3445f;
		int scale = 2;// 设置位数
		int roundingMode = 4;// 表示四舍五入,可以选择其他舍值方式,例如去尾,等等.
		BigDecimal bd = new BigDecimal((double) ft);
		bd = bd.setScale(scale, roundingMode);
		ft = bd.floatValue();
		System.out.println(ft);
		
		//第5种
		MathContext v2 = new MathContext(2, RoundingMode.HALF_UP);
		BigDecimal a2 = new BigDecimal("0.875", v2);
		System.out.println(a2);
		
	}

}


第2种方法到是“五舍六入” 是因为传入的参数不对,所以出现“五舍六入” ,四舍五入见第5种方法

相关推荐

Global site tag (gtag.js) - Google Analytics