在C中输出等式

时间:2012-12-21 00:01:35

标签: c

我正在用C编写一个小程序,它将在1秒内输出总CPU百分比。我在大多数时候都有它工作,它确实计算了正确的数字,但是最终的计算它将workOver除以totalOver * 100它总是输出0.我不知道为什么。任何帮助都会很棒。代码如下。

#include <stdio.h>
#include <glibtop.h>
#include <glibtop/cpu.h>
#include <unistd.h>
#include <math.h>

unsigned long cpu1Total, cpu1User, cpu1Nice, cpu1Sys, cpu1Work;
unsigned long cpu2Total, cpu2User, cpu2Nice, cpu2Sys, cpu2Work;
unsigned long workOver, totalOver, cpuTotal;

int main(){

    glibtop_init();

    glibtop_cpu cpu;
    glibtop_get_cpu (&cpu);

    cpu1Total = cpu.total;
    cpu1User = cpu.user;
    cpu1Nice = cpu.nice;
    cpu1Sys = cpu.sys;

    cpu1Work = cpu1User + cpu1Nice + cpu1Sys;

    usleep ( 1000000 ) ;

    glibtop_get_cpu (&cpu);

    cpu2Total = cpu.total;
    cpu2User = cpu.user;
    cpu2Nice = cpu.nice;
    cpu2Sys = cpu.sys;

    cpu2Work = cpu2User + cpu2Nice + cpu2Sys;

    workOver = cpu2Work - cpu1Work;
    totalOver = cpu2Total - cpu1Total;

    cpuTotal = workOver / totalOver * 100;

    printf("Cpu Idle : %ld \n", cpuTotal);

    return 0;
}

2 个答案:

答案 0 :(得分:3)

分区中的变量声明为整数。问题是如果你划分两个整数,你将得不到小数值。这意味着如果分母是>比分子,结果为0。

整数除法不会自动产生浮点结果。

要解决此问题,您可以将公式中的至少一个变量重新声明为浮点数,或者甚至将它们投射到计算中。

答案 1 :(得分:1)

当您使用unsigned longfloat进行除法时,您正在使用doublelong或任何整数值都不能处理小数点,所以如果你有一个数字0&lt; x&lt; 1,当小数被切断时,你留下0。