Java 保留小数点后n位的最简单实现(返回浮点数)

  很早以前就比较疑惑Java怎么保留小数点后两位(或者后n位),看了CSDN很多篇博客越看越头疼。为啥那么多方法到最后都是字符串累心呢?我只需要保留小数点后几位,没让你给我转成字符串呀。按照那些方法,最后还是要用Double.parseDouble(arg0);这个方法转成double。既然如此,那我为啥不用字符串截取呢?这样写起来还没那么复杂。下面是字符串截取的思路:

public double saveNumAfterPoint(double oldDouble,int num) {
//double oldDouble 原浮点数,int num 需要保留小数点后几位
		String temp = oldDouble+"";
		double newDouble = .0D;
		temp = temp.substring(0,temp.indexOf('.')+num+1);
		try {
			newDouble = Double.parseDouble(temp);
		} catch (NumberFormatException e) {
			e.printStackTrace();
		}
		return newDouble;
	}

说实话,我个人觉得这种字符串截取的,实在是太lowB了,性能什么的都不说了,就这写起来都这么长一串。因此就产生了一个重新写一个更简单点的方法,说干就干,下午上班无聊正好就写了一个出来。不过这个方法存在一个问题就是最多保留小数点后19位,因为long类型的取值范围(-9223372036854774808~9223372036854774807)就限制了被除数的大小。不过,对于大部分需要取小数点后几位的应用场景来说,只需要保留后2位左右。下面是我用字符串截取的思路的另外一种方法:

public double saveNumAfterPoint(double oldDouble,int deleverLength) {
//double oldDouble 原浮点数,int deleverLength 需要保留小数点后几位
		double newDouble = .0D;
		long deliverNum = (long)Math.pow(10, deleverLength);
		newDouble = ((long)(oldDouble*deliverNum)*1.0)/deliverNum;
		return newDouble;
	}

为了方便理解这里的第二种方法整成函数了,但是可以精简成一行代码,这里偷个懒,需要的童鞋自己改吧!哈哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值