double四舍五入保留两位小数

doubled1=Math.round(4.015*100)/100.0;为什么打印为4.01?... double d1 = Math.round(4.015*100)/100.0;
为什么打印为4.01?
展开
 我来答
忘至白葬不情必0T
2011-11-18 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
我猜测如下,因为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位是偶数还是奇数,奇数则进位,偶数则不管。
百度网友db09d45
2012-05-25
知道答主
回答量:25
采纳率:0%
帮助的人:7.4万
展开全部
double d1 = Math.round(4.015*100+0.5)/100.0;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
树礼梨m
2011-11-17 · TA获得超过417个赞
知道小有建树答主
回答量:926
采纳率:75%
帮助的人:136万
展开全部
(4.015*100)是401.5
(double)(401.5/100.0)取两位自然就是4.01
追问
我前面还用了个工具类的方法你没看到啊?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qinwan79
2011-11-17 · 贡献了超过257个回答
知道答主
回答量:257
采纳率:0%
帮助的人:79.6万
展开全部
double x;int y; scanf("%lf",&清戚x); x=x*100; y=int(x+0.5); 就是保留答昌陵两位小数的意思,自动四舍五入。保迅者留3位同理用 %.3f 上面的double
追问
我这个是java语言中
你说的是c?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式