------- <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>