黑马程序员---给定一个小数,保留小数的后两位

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

给定一个小数,保留小数的后两位
思路:

刚开始,是用的String里面的substring方法截取字符串来做的。但是后来发现用这个方法没有做到小数点最后一位的四舍五入。

先说下用String的做法:

思路是先把double数封装成Double类型对象,然后用toString方法转换成String类型。

然后获取小数点的角标,最后使用substring方法截取0到角标+1的字符串

最后使用Double类中的valueOf方法把字符串转换成Double类型对象,返回Double对象

<span style="font-size:14px;">import java.util.*;
class MathTest 
{
	public static void main(String[] args) 
	{
		Random r = new Random();

		//double d = r.nextDouble()*20;
		double d = 10.10023;
		sop("d = "+d);

		d = keepNum(d,2);

		sop("d = "+d);

	}

	//把保留小数的方法封装,num是要保留的小数位数
	public static Double keepNum(double d,int num)
	{
		Double dou = d;
		String s = dou.toString();
		int index = s.indexOf('.');

		s = s.substring(0,index+num+1);
		sop(s);
		dou = Double.valueOf(s);
		return dou;
	}

	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}</span>


后来我利用了double转换成int数时抹除小数的特点
1、首先把给定的小数乘以1000
2、把乘以1000后的数强转成int类型,得到int i
3、然后把i%10后产生的数赋值给int i2
4、判断i2是否大于5,大于5则改变i=(i+10)/10,注意这里用i接收,这样最后一位就被去除了
5、最后把i除以100,把得到的double值返回。
6、我这里把要保留的小数设置成参数传递,这样可以想保留几位小数就保留几位小数。

<span style="font-size:14px;">import java.util.*;
class MathTest 
{
	public static void main(String[] args) 
	{
		Random r = new Random();
		double d = r.nextDouble()*10;
		sop("d = "+d);
		d = keepNum(d,2);//调用方法,保留两位小数
		sop("d = "+d);
	}
	//把保留小数的方法封装,num是要保留的小数位数
	public static Double keepNum(double d,int num)
	{
		d = d*Math.pow(10,num+1);
		int i = (int)d;
		sop(i);
		int i2 = i%10;
		if (i2>=5)
		{
			i = (i+10)/10;
		}
		else
		{
			i = i/10;
		}
		d = (i/Math.pow(10,num));
		return d;
		
	}
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}</span>



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值