Java 四舍五入计算问题

Java  四舍五入计算问题

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


public class Test {

	public static void main(String[] args) {
		//第一种方法并非完全是    四舍五入
		double d1=2.346;
		double d2=2.342;
		//下面这四个数是重点
		double d3=2.345;
		double d4=2.3456;
		double d5=2.3451;
		double d6=2.3450;  
		
		DecimalFormat df=new DecimalFormat("#.00"); 
		System.out.println(df.format(d1));  //2.35
		System.out.println(df.format(d2));  //2.34
		//严格意义他并不是四舍五入   虽然保留两位小数  如果第三位为5 但是他还需要看第四位
		//第四位为0和第四位没有值情况相同都不进位    第四位不为0则进位
		System.out.println(df.format(d3));	//2.34
		System.out.println(df.format(d4));	//2.35
		System.out.println(df.format(d5));	//2.35
		System.out.println(df.format(d6));	//2.34
		
		System.out.println("****************************");
		
		//第二种方法
	    double f = 111231.5556;  
	    BigDecimal b = new BigDecimal(f);  
	    //HALF_UP:最近数字舍入(5进)。这是我们最经典的四舍五入。
	    System.out.println(b.setScale(2,RoundingMode.HALF_UP).doubleValue());    //111231.56
	    //HALF_DOWN:最近数字舍入(5舍)。在这里5是要舍弃的。
	    System.out.println(b.setScale(2,RoundingMode.HALF_DOWN).doubleValue());  //111231.56
	    //HAIL_EVEN:银行家舍入法。
	    System.out.println(b.setScale(2,RoundingMode.HALF_EVEN).doubleValue());  //111231.56
	    //UP:远离零方向舍入。向绝对值最大的方向舍入,只要舍弃位非0即进位。
	    System.out.println(b.setScale(2,RoundingMode.UP).doubleValue());         //111231.56
	    //DOWN:趋向零方向舍入。向绝对值最小的方向输入,所有的位都要舍弃,不存在进位情况。
	    System.out.println(b.setScale(2,RoundingMode.DOWN).doubleValue());       //111231.55
	    //CEILING:向正无穷方向舍入。向正最大方向靠拢。若是正数,舍入行为类似于UP,
	    //若为负数,舍入行为类似于DOWN。Math.round()方法就是使用的此模式
	    System.out.println(b.setScale(2,RoundingMode.CEILING).doubleValue());   //111231.56
	    //FLOOR:向负无穷方向舍入。向负无穷方向靠拢。若是正数,舍入行为类似于DOWN;若为负数,舍入行为类似于UP。
	    System.out.println(b.setScale(2,RoundingMode.FLOOR).doubleValue());     //111231.55
	    
	    System.out.println("****************************");
	    //第三种
	    //Math.round()或者Math.rint():返回其值最接近参数并且是整数的 long,int或者double 值。
	    double b1=1.235;
	    System.out.println(Math.rint(b1));    //1.0
	    System.out.println(Math.round(b1));   //1
	    //如果要保留2位小数,那么
	    System.out.println(Math.rint(b1*100)/100);  //1.24
	    //Math.round()不适用
	    System.out.println(Math.round(b1*100)/100); //1
	}
	
}


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值