C 浮点除法结果四舍五入为零

C Floating Point Division Result Rounded to Zero

为什么这个表达式的输出为零?

float x = ((1000)/(24 * 60 * 60));

把它分成两部分,给出正确的结果:

float x = (1000);
x /= (24 * 60 * 60);

看到这个答案,它会给你正确的输出

#include <stdio.h>

int main(void) {
    float x = (float)1000/(24 * 60 * 60);
    printf("%f",x);
    return 0;
}

输出:0.011574 也可以看到输出:http://ideone.com/6bMp9r

声明

float x = ((1000)/(24 * 60 * 60));

执行以下操作:

  1. 声明类型 float 的变量 x
  2. 评价((1000)/(24 * 60 * 60))
    1. 计算 24*60*60 为 86400。
    2. 计算 1000/86400 为 0。
  3. 将其结果(即 0)分配给 x

第二步,((1000)/(24 * 60 * 60))为零——除法是整数除法,因为两个操作数都是整数。稍后将结果分配给浮点变量这一事实没有任何区别。

最简单的解决方法是确保除法的两边都是浮点数,因此它将使用浮点除法。例如,您可以将 1000 更改为 1000.0f