簡體   English   中英

用 c 四舍五入

[英]Rounding with c

我正在嘗試從午夜開始的時間(記錄在數組中)以小時和分鍾為單位進行轉換。 但我看到有一個舍入錯誤。 例如出發時間 583(從午夜開始的分鍾數),計算時間和分鍾數如下:

583/60 = 9.716666

我把整個部分(9)小時。 然后我取小數部分並這樣做:

0.716666 * 60 = 42.99996

分鍾數為 43,但不幸的是,我無法將這個值四舍五入。

有什么想法?

#include <stdio.h>

#define SIZE (int)sizeof(departures) / sizeof(departures[0])

int main(void) {
    int hours, minutes, mmin, fh, fm;
    float res;

    int departures[] = {480, 583, 679, 767, 840, 945, 1140, 1305};
    int Arrivals[]   = {616, 712, 91, 900, 968, 1075, 1280, 1438};

    for(int i = 0; i < SIZE; i++) {
        res = (float)departures[i] / 60;
        fh  = departures[i] / 60;
        fm  = ((float)departures[i] / 60 - fh) * 60;

        printf("%d) %d:%d (%f)\n", i, fh, fm, res);     
    }   

    return 0;
}

您可以使用圓形 function:

#include <stdio.h>
#include <math.h>
 int main()
{
       float i=5.4, j=5.6;
       printf("round of  %f is  %f\n", i, round(i));
       printf("round of  %f is  %f\n", j, round(j));
       return 0;
}

Output:

5.400000 輪是 5.000000

5.600000 輪是 6.000000

余數%操作根本不需要浮點數。 這在數值上更穩定。

#include <stdio.h>  /* size_t printf */

int main(void) {
    unsigned departures[] = {480, 583, 679, 767, 840, 945, 1140, 1305};
    const size_t departures_size = sizeof departures / sizeof *departures;
    size_t i;

    for(i = 0; i < departures_size; i++)
        printf("%lu) %u:%u\n", (unsigned long)i,
        departures[i] / 60, departures[i] % 60);

    return 0;
}

我已將int更改為unsigned int以便人們知道沒有底片。 請參閱此問題以了解原因。 這給出了,

...
1) 9:43

您執行以下操作:

583/60 = 9.716666

我把整個部分(9)小時。 然后我取小數部分並這樣做:

0.716666 * 60 = 42.99996

你為什么不這樣做呢?

583/60 = 9.716666

你花了整個部分(9)小時。 然后你這樣做:

583 - (9 * 60) = 43

像這樣,你不需要四舍五入:-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM