我正在用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;
}发布于 2012-12-21 08:02:47
除法中的变量被声明为整数。问题是,如果你除以两个整数,你将得不到小数值。这意味着如果分母大于分子,结果将为0。
整数除法不会自动产生浮点结果。
要解决此问题,您可以在公式中将至少一个变量重新声明为浮点数,甚至可以在计算中对它们进行强制转换。
发布于 2012-12-21 08:03:25
当你应该使用float或double来做除法运算时,你却在使用unsigned long。long或任何整数值都不能处理小数点,所以如果你有一个数字0
https://stackoverflow.com/questions/13982408
复制相似问题