我是C编程新手,但对Java有经验。我正在创建一个简单的控制台应用程序来计算两个选定值之间的时间。我将选择的值存储在一个int数组中,如下所示:

static int timeVals[] = {748,800,815,830,845,914,929,942,953,1001,1010,1026,1034,1042,1048};

我调用一个diff方法来计算to值之间的时间间隔如下:
int diff (int start, int slut) {
/* slut means end in danish. not using rude words, but I am danish */
int minutes = 0;
int time = 0;
double hest;
hest = (100/60);
printf("hest = %f", hest);
if(timeVals[start] > timeVals[slut])
{
    minutes = timeVals[start] - timeVals[slut];
    /* printing hest to see what the value is */
    printf("t = %f",hest);
    time = minutes * (100/60);
    printf("minut diff: %d\n", time);
}
else
{
    minutes = timeVals[slut] - timeVals[start];
    tiem = time + (minutes * (100/60));
}

return time;
}

奇怪的是,当我打印出hest值时,我得到了1.000000,我的意思是这不对。。。我已经挣扎了好几个小时了,但我找不到问题所在。。也许我只是数学不好:P
希望你能帮助我

最佳答案

问题是
hest = (100/60)
这个结果将是1,因为100/60=1.6666….,但这是整数除法,所以您将丢失小数,所以hest=1。使用
hest = (100.0 / 60.0)
与相同
time = minutes * (100/60);
更改为
time = minutes * (100.0 / 60.0);
在这种情况下,您将丢失小数,因为time是一个整数。
如果速度是个问题,有些人会建议您执行所有integer calculations操作,并在1/100秒内将所有项目存储为整数(即60分钟在1/100秒内=60分钟*60秒*100)
编辑:为了澄清,链接是C++,但同样的原则适用。但在大多数基于x86的系统上,这并不像在功率有限的嵌入式系统上那么重要。这里是讨论这个问题的another link

关于c - 将整数转换为分钟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22096843/

10-11 22:50
查看更多