欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java中保留小数点的方法

程序员文章站 2022-04-16 18:02:13
...

今天测试测出消息传递过程中有个小数精确度有问题。

要求保留小数点6位,不够的用0补充,结果开发时没注意,0.123456格式控制后变成了.123456,虽然从的值的角度来说没有区别,但是下游收到消息的人不认。。。。。。

总结了以下常见的四舍五入方法:

public static void main(String[] args) {
		
		System.out.println(getNum(0.23656,"#.0000",false));//.2365 不四舍五入,整数部分为0时省略
		System.out.println(getNum(0.23656,"0.0000",false));//0.2365不进行四舍五入,整数部分为0时不省略
		System.out.println(getNum(0.23656,"0.0000",true));//0.2366 进行四舍五入 
		System.out.println(getNum(0.236,"0.0000",true));//0.2366 进行四舍五入  不够的小数部分补零
//		
//		System.out.println(getNum2(0.23456,3));//精确小数点第三位,四舍五入
		
		//System.out.println(getNum3(0.2345,3,false));//0.234
		
//		System.out.println(getNum4(0.2345,3,false));//0.234
//		System.out.println(getNum4(0.2345,3,true));//0.235
//		System.out.println(getNum4(0.23,3,false));//0.23 没有补零
	}
	
	
	public static String getNum(double str,String pattern,boolean flag){
		DecimalFormat format = new DecimalFormat(pattern);//保留小数点三位
		if(flag) {
			format.setRoundingMode(RoundingMode.UP);//进行四舍五入
		} else {
			format.setRoundingMode(RoundingMode.DOWN);//不进行四舍五入
		}
		return format.format(str);
	}
	
	
	public static String getNum2(double str , int decima) {
		long n = 1;
		for(int i = 1 ; i <= decima; i++ )
			n *= 10;
		return String.valueOf((int)(str * n +0.5) / (n * 1.0));
	}
	
	
	public  static double getNum3(double str,int point, boolean flag){
		BigDecimal   b   =   new   BigDecimal(str); 
		if(flag) {
			return b.setScale(point,  BigDecimal.ROUND_HALF_UP).doubleValue();
		} 
		return b.setScale(point,  BigDecimal.ROUND_HALF_DOWN).doubleValue();
	}
	
	
	
	public static String getNum4(double d,int point,boolean flag) {
        NumberFormat nf = NumberFormat.getNumberInstance();
        nf.setMaximumFractionDigits(point); // 保留小数点位数
        if(flag){
        	 nf.setRoundingMode(RoundingMode.UP);//四舍五入
        }else {
        	 nf.setRoundingMode(RoundingMode.DOWN);// 不四舍五入
        }
        return nf.format(d);
    }
	

 

相关标签: java Javase