大家帮忙看看输出

拉卡尼休 2009-08-08 08:06:18
大家帮忙看看,ll的值应该是多少,为什么?谢谢
#include <stdio.h>

int main(int argc, char* argv[])
{
float hh = 2.3;
unsigned int ll = ((int)(hh*10))%10;
printf("%d\n",ll);
return 0;
}
...全文
114 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
guifei05 2009-08-09
  • 打赏
  • 举报
回复
把float hh = 2.3;定义为double hh=2.3;试试
harukoQ 2009-08-09
  • 打赏
  • 举报
回复
cout<<(int)(hh*10)果然是22....
飞天御剑流 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 linux_qt 的回复:]
呵呵,我用gcc/g++/VC编译的结果都是2,我这样解释,编译器看到float型的2.3认为,3是最后精确地数字,所以它在内存存储的值可能是2.300001或者2.299998,这个程序中也许恰好选择了后者,所以ll值就是2了。
在这里是希望大家能给出确定的解释,我只是猜测,谢谢了。
[/Quote]

原因就是这样。
fuel2002 2009-08-09
  • 打赏
  • 举报
回复
你把hh换成2.4或2.5不就结了吗?原因很容易得到嘛。
拉卡尼休 2009-08-08
  • 打赏
  • 举报
回复
另外,因为有显示强制类型转换,所以也就没有了数据丢失的警告。
拉卡尼休 2009-08-08
  • 打赏
  • 举报
回复
呵呵,我用gcc/g++/VC编译的结果都是2,我这样解释,编译器看到float型的2.3认为,3是最后精确地数字,所以它在内存存储的值可能是2.300001或者2.299998,这个程序中也许恰好选择了后者,所以ll值就是2了。
在这里是希望大家能给出确定的解释,我只是猜测,谢谢了。
wuda_1990 2009-08-08
  • 打赏
  • 举报
回复
我认为是3,在c++里2.3是double类型的,会出现数据丢失的警告。
拉卡尼休 2009-08-08
  • 打赏
  • 举报
回复
这两个输出有关系吗?
float hh = 2.3;
unsigned int ll = ((int)(hh*10))%10;
printf("%f\n",hh);
printf("%d\n",ll);
pmerOFc 2009-08-08
  • 打赏
  • 举报
回复
2或3
难说

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧