为什么这个整数除法产生0?

时间:2012-01-11 14:22:03

标签: c math variables

有人可以告诉我为什么以下代码在标记的行输出0

似乎一切都是正确的但是当我试图将结果接近结束时,它每次都给我0。

#include <stdio.h>

int main() {

    // Gather time-lapse variables

    int frameRate, totalLengthSecs;
    printf("How many frames per second: ");
    scanf("%i", &frameRate);
    printf("--> %i frames confirmed.", frameRate);
    printf("\nDesired length of time-lapse [secs]: ");
    scanf("%i", &totalLengthSecs);
    printf("--> %i seconds confirmed.", totalLengthSecs);
    int totalFrames = frameRate * totalLengthSecs;
    printf("\nYou need %i frames.", totalFrames);

    // Time-lapse interval calculation

    int timeLapseInterval = totalLengthSecs / totalFrames;

    printf("\n\n%i", timeLapseInterval); // <-- this prints 0

    return 0;
}

4 个答案:

答案 0 :(得分:4)

简而言之:整数除法截断

您需要以下内容:

double timeLapseInterval = (double) totalLengthSecs / (double)totalFrames;
printf("\ntimeLapseInterval : %f \n", timeLapseInterval);

答案 1 :(得分:3)

您正在执行整数数学。

两个整数之间的数学将产生一个整数。结果将四舍五入为零。

这一行:

totalLengthSecs / totalFrames;

可能产生的结果介于01之间。并四舍五入到0

答案 2 :(得分:1)

您正在打印整数,因此它将向下舍入该值。

timeLapseInterval / totalFrames将是(1 / frameRate),它将是&lt; 1除非frameRate为1(或0,在这种情况下,你有一个错误除以0)

答案 3 :(得分:0)

当您在C中除以2个数且分母为整数时,编译器将其视为整数除法。因此,如果将1除以2,则返回零而不是0.5

此外,你的输出变量也是一个整数,因此,如果你期望十进制输出,你就不会得到它。

您可以通过执行以下操作来解决此问题:

float timeLapseInterval = totalLengthSecs /(float)totalFrames;

printf(“\ n \ n%f”,timeLapseInterval);

我希望这会有所帮助