首页 > 解决方案 > 为什么 gcc 将浮点小数 #defines 评估为零?

问题描述

怎么(float)_micron_to_meter等于零?鉴于:

//convert microns to meters via multiplication
#define _micron_to_meter (1 / 1000000)

但是

printf("factor: %f\n", (float)_micron_to_meter);

打印出 0.000000。

哦.. duh...我不敢相信我忘记了这一点。下面回答。我犹豫要不要发布这个,但我在这里做了相当广泛的搜索,找不到任何其他关于它的帖子。肯定还有其他一些程序员会像我在这里一样一无所知。如果您找到另一个,请随意将其标记为重复,但请检查为什么找不到该帖子?

标签: gcc

解决方案


请注意任何未来的 C 程序员(我/知道/这个,我不确定我是如何错过它的)。如果您有一个由整数组成的小数定义,例如

//convert microns to meters via multiplication
#define _micron_to_meter (1 / 1000000)

那么值为零。在它脱离 () 之前它已经为零了。因为 1 被假定为整数,并且 (int)1 除以任何大于 0 的值都小于 1,整数只能从 1 到 0。如果这样做:

#define _micron_to_meter (1.0 / 1000000)

然后它按预期工作,因为假设 1.0 是浮点数。


推荐阅读