c – 将一个整数乘以一个浮点数字 – 需要“F”吗?

这是:
int i = 100 * 0.6;

不太正确吗?

int i = 100 * (0.6F);

对于这样一个简单的问题,我深表歉意,但我没有记住数据类型促销的所有规则,我不确定如何验证这一点.

解决方法

它可以有所作为.对于 example
int i = (1 << 24) + 3;

printf("%d\n",(int)(i * 0.6));    // 10066331
printf("%d\n",(int)(i * 0.6f));   // 10066332

原因是第一次的计算是以双精度完成的,后者是单精度的.单精度不能表示大于1的所有整数,24.

一个example(由@EricPostpischil在下面的评论中提供):

int i = 100;

printf("%d\n",(int)(i * 0.29));    // 28
printf("%d\n",(int)(i * 0.29f));   // 29

这里的原因是双精度情况下的中间结果略低于29,因此截断到28.

所以我建议允许双重精度(即省略f / F)(然后使用round()而不是依赖于隐式截断),除非你有一个很好的理由去做.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...