打印
[嵌入式linux]

一个关于强制转换的问题

[复制链接]
857|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jbbppa|  楼主 | 2012-5-11 17:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jbbppa 于 2012-5-11 17:25 编辑

使用的是borland c++6.0
题目是输入一个double类型数,保留小数后两位,对第三位进行四舍五入。答案是:main()
{   
  double a,b;   
  scanf("%lf",&a);   
  b=(int)(a*100+0.5)/100.0;   
  printf("%.2f",b);
}
验证发现如果输入123.345或者说是XXX.XX5结果输出结果为123.34而不是123.35,求大神指教。
b=(int)(a*100+0.5)/100.0;此句我分开打印验证,如果写成
b=a*100+0.5;
b=(int)(b);
b=b/100;
就是对的,问题出在 (int)强制转换上面,即写成b=(int)(a*100+0.5)输入123.345,结果为12334而不是12335,为什么?
我还发现一个奇怪问题,就是 b=(int)(a*100+0.5)/100.0;最后必须写100.0而不是100,如果是100就会变成输入123.345,经过此步后就会变成123.00,但是如果是如下面我分开写成
b=a*100+0.5;
b=(int)(b);
b=b/100;就没有问题,这又是为什么?

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

39

帖子

0

粉丝