double四舍五入保留两位小数
doubled1=Math.round(4.015*100)/100.0;为什么打印为4.01?...
double d1 = Math.round(4.015*100)/100.0;
为什么打印为4.01? 展开
为什么打印为4.01? 展开
4个回答
展开全部
我猜测如下,因为4.015,小数部分的0.015表示成2进制数时是无限循环的,因此用double型表示银做4.015时,由于double的位数有限,所以只能用一个略小于4.015的数(肯定是略小于,因为只有位数无限时,这个锋塌衡2进制数才能等于0.015)去近似表示4.015,假设这个数是4.0149......,衫磨那么乘100后是401.49......,Math.round后是401。
更多追问追答
追问
我发现java api中没有个完整解决的方法
DecimalFormat df = new DecimalFormat("0.00");
String result = df.format(d);
当d为0.005结果为0.00
追答
这里可能涉及到银行家四舍五入法,比如0.005四舍五入到小数点后2位时,如果第3位是5,会看第2位是偶数还是奇数,奇数则进位,偶数则不管。
展开全部
double d1 = Math.round(4.015*100+0.5)/100.0;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(4.015*100)是401.5
(double)(401.5/100.0)取两位自然就是4.01
(double)(401.5/100.0)取两位自然就是4.01
追问
我前面还用了个工具类的方法你没看到啊?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
double x;int y; scanf("%lf",&清戚x); x=x*100; y=int(x+0.5); 就是保留答昌陵两位小数的意思,自动四舍五入。保迅者留3位同理用 %.3f 上面的double
追问
我这个是java语言中
你说的是c?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询