黑马程序员技术交流社区
标题:
保留小数点两位!
[打印本页]
作者:
a8851625
时间:
2014-11-13 17:54
标题:
保留小数点两位!
double l=113.6696132;
int n=(int)(l*100+0.5);
System.out.println((double)n /100);
通过这个方法可以保留小数两位,但是无论是*1000 /1000 还是更多数量级,都只能保留2位,这是为啥?
有更好的方法介绍么?越简单越好!
作者:
Paul_Chang
时间:
2014-11-13 19:37
没太看懂,不过(double)n/100,先执行的是右边再强制转换的,可能损失精度了.对于保留小数位的运算,可参考该类:java.text.DecimalFormat
作者:
hanxing
时间:
2014-11-14 00:13
class Demo7
{
public static void main(String[] args)
{
double num=123.774789;
String str=String.valueOf(num);
int index=str.indexOf(".");
str=str.substring(index+1,index+3);//取小数点后的2位数字
num=(int)num+(double)Integer.valueOf(str)/100;//整数部分+2位数字/100
System.out.println(num);
}
}
复制代码
作者:
chudaming213
时间:
2014-11-14 05:57
int n=(int)(l*100+0.5)这句运行之后 113.6696132就变成11367之后的数字都没有了,所以在这句之后无论你是乘以多少再除以多少,n都是11367的。之后也都是对这个数进行操作了,比如你使用的强制类型转换double。不知道这么解释对不。
作者:
马个了黑_邓
时间:
2014-11-14 16:19
double d = 34.5354444;
long l = Math.round(d*100); //扩大100倍后四舍五入
System.out.print((double)l/100);
小小代码,贱笑了
作者:
冥夜
时间:
2014-11-14 20:59
马个了黑_邓 发表于 2014-11-14 16:19
double d = 34.5354444;
long l = Math.round(d*100); //扩大100倍后四舍五入
...
能完成功能,但是*100很容易数值超出范围。
作者:
高昌德
时间:
2014-11-15 06:41
表示同意2楼
作者:
yibo924
时间:
2014-11-15 07:32
逻辑没问题,但是int范围不够 113669超过2∧7了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2