自己写个类实现对小数的四舍五入,保留相应的位数

虽然利用java.math.BigDecimal可以进行小数的四舍五入,但是不能保留相应的位数,如下:</span>
<span style="white-space:pre">		</span>System.out.println(
				Float.parseFloat(new BigDecimal("12.2355").setScale(3, BigDecimal.ROUND_HALF_UP).toString()));
		System.out.println(
				Float.parseFloat(new BigDecimal("12.2398").setScale(3, BigDecimal.ROUND_HALF_UP).toString()));
		System.out.println(
				Float.parseFloat(new BigDecimal("12.23").setScale(3, BigDecimal.ROUND_HALF_UP).toString()));
		System.out.println(
				Float.parseFloat(new BigDecimal("12.235").setScale(3, BigDecimal.ROUND_HALF_UP).toString()));


 
输出结果为:</span>
12.236
12.24
12.23
12.235

于是,自己写了一个类,对小数四舍五入时,还可以保留相应位数。
 
import java.math.BigDecimal;
public class RoundTool {
	public static String round(double num,int dotNum){
				//num为要进行四舍五入的数,dotNum为保留的小数位数
		String numValue=String.valueOf(num);
		int dot=numValue.indexOf(".");
		int dotLength=numValue.length()-1-dot;
		//num的小数位数大于dotNum
		if(dotLength>dotNum){
			//valueIn为要考虑的进位数
			String valueIn=numValue.substring(dot+dotNum+1, dot+dotNum+2);
			//value为进位数之前的数
			String value=numValue.substring(0, dot+dotNum+1);
			double initValue=Double.valueOf(value);
			int numIn=Integer.valueOf(valueIn);
			//进位数大于等于五,就要向前进位
			if(numIn>=5){
				StringBuilder inString=new StringBuilder();
				inString.append("0.");
				int i=dotNum-1;
				while(i>0){
					inString.append("0");
					i--;
				}
				inString.append("1");
				//算出要加的数0.00***01
				double doubleIn=Double.valueOf(inString.toString());
				BigDecimal x=new BigDecimal(value);
				BigDecimal y=new BigDecimal(inString.toString());
				BigDecimal z=x.add(y);  //两数相加
				String endsString=z.toString();
				//以下是考虑进位后是否还有向前进位
				int dotpos=endsString.indexOf(".");
				int dotposLength=endsString.length()-1-dotpos;
				//如果向前进位后小数位数小于dotNum,则补零
				if(dotposLength<dotNum){
					int j=dotNum-dotposLength;
					while(j>0){
						endsString+="0";
						j--;
					}
				}
				return endsString;				
			}else{ 		//进位数小于五,不进位
				return value;
			}
		}else if(dotLength==dotNum){	//num的小数位数等于dotNum
			return numValue;
		}else{			//num的小数位数小于dotNum,则补零
			int z=dotNum-dotLength;
			while(z>0){
				numValue+="0";
				z--;
			}
		}
		return numValue;
		
	}
	public static void main(String[] args) {
		//测试
		System.out.println(round(12.2355, 3));
		System.out.println(round(12.2398, 3));
		System.out.println(round(12.23, 3));
		System.out.println(round(12.235, 3));
	}

}

测试结果:
 
12.236
12.240
12.230
12.235
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值