qq_37749305
qq_37749305
采纳率0%
2017-03-03 14:56 阅读 3.1k

急救!!!c语言中 关于 double转int的精度问题

#include
#define TEXT 100000
int main()
{
double a=7.1,c=7.50,f=7.11;
int b,d,e;
b=a/0.1;
d=c/0.01;
e=f/0.01;
printf("%d\n%d\n%d\n",b,d,e);
return 0;
}
为什么结果和我想象的不一样啊,b,d不正常,但是e为什么又正常了阿???
求解阿!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

5条回答 默认 最新

  • caozhy 从今以后生命中的每一秒都属于我爱的人 2017-03-03 15:23

    double转int是直接舍去尾数而不是四舍五入,因此对于将将好接近整数的浮点数转换,有可能会少1或者多1(负数),因为浮点数在进制转换和计算上存在误差。

    点赞 1 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2017-03-03 15:23

    避免这种误差的办法一般是 +0.5 再取整,也就是四舍五入。

    点赞 1 评论 复制链接分享
  • vsign94hui 会跳舞De袋鼠 2017-03-03 15:31

    计算机精度的问题,比如说,double a = 1; double b = a / 2; 结果会是 b = 0.499999 等。

    点赞 1 评论 复制链接分享
  • qq_37749305 qq_37749305 2017-03-03 15:12

    为什么啊?b=70,d=749,e=711 ????

    点赞 评论 复制链接分享
  • qq_29594393 当作看不见 2017-03-08 14:34

    类型转换,精度丢失,向下强转(为什么说向下呢,由于是字节数长的变短了,需要强转,而且字节数变少了,那就只能丢掉一部分了)
    向上的话,会默认转换,小房子搬到大房子,总是有很多空间的,大房子般小房子,就不得不扔掉一些东西。

    点赞 评论 复制链接分享

相关推荐