免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1954 | 回复: 4
打印 上一主题 下一主题

[C++] 一个类型转换及返回值的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-11 10:03 |只看该作者 |倒序浏览
5可用积分
有一函数申明如下:
double aa( int, int );

在另外一函数里调用aa:
int bb()
{
  return aa( 16, 1 );
}

上面bb中有一个默认类型转换: 将aa的返回值由double转换成int;

在bb中以double输出aa( 16, 1 ):
printf( "%f\n", aa( 16, 1 ) );
输出为16.000000

而输出bb返回值:
printf( "%f\n", bb() );
输出为15

按理说, 16.000000由double转换成int,
舍弃小数部分后应该为16, 为什么是15了?
我百思不得其解, 在此请教了, 多谢了!!!

论坛徽章:
0
2 [报告]
发表于 2012-09-11 11:18 |只看该作者
你的理解是正确的,换个没有bug的编译器就对了。

论坛徽章:
0
3 [报告]
发表于 2012-09-11 11:23 |只看该作者
问题自己解决了:
在bb中调用lround就行了:
int bb()
{
  return lround( aa( 16, 1 ) );
}

至于C++默认转化取整造成数据减小, 我还没搞明白.
我试了强制转化,还是一样的结果.
看来以后得注意强制转化和C++默认转化所造成的副作用了.

论坛徽章:
0
4 [报告]
发表于 2012-09-11 11:23 |只看该作者
哦,只是printf输出的问题
你可以用printf( "%f\n", (double)bb() );

论坛徽章:
0
5 [报告]
发表于 2012-09-11 11:25 |只看该作者
回复 4# wuhran
直接输出double是没问题的, 但我必须得到int值.

用lround就行了.

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP