0

在我的应用程序中,我每 12 小时将一个变量(流)重置为零。为此,我有一个逻辑,但它没有按预期工作。我得到的时间是小时格式。当时间达到 12 时,变量 Flow 变为零,但下一秒它应该再次开始读取当前值。但从我的逻辑来看,它开始读取第 13 小时。

这是示例代码

int _tmain(int argc, _TCHAR* argv[])
{

    double dtime;
    int iTime;
    double flow = 2.000;
    printf("Enter time: ");
    scanf(" %lf",&dtime);

    iTime = (int)dtime;

    if(iTime% 12==0)
    {
        flow=0;
    }

    printf("Time: %d\n",iTime);
    printf("Flow: %lf",flow);
    getch();
    return 0;
}

如果时间 11.3614 像这样,则流量为 2。如果时间精确到 12,那么对于那一秒,流量 =0。然后在下一秒再次开始读取流量值。这里的流量值是从其他函数连续读取的。但是在这个示例代码中,为了便于理解,我进行了硬编码。

如果时间是 12.023,当我将 double 转换为 int 时,它只返回 12。但是按照我的要求,这次它开始读取值。如何在不丢失分数的情况下将 double 转换为 int?

我试过了

iTime = (int)(dtime+0.5);

但同样,iTime 变为 13 仅 dtime 大于 12.5。

4

1 回答 1

0

您可以先将 double 乘以某个因子(10、100 或 1000),将其转换为 int,然后再除以相同的因子返回 double。

我不完全理解逻辑,但是在转换为 int 期间不能保存分数,因为 int 值不能拥有它。

也试着看看这里: 不能在双打上使用模数?

于 2018-06-09T06:28:35.447 回答