2016-02-13 68 views
-2

爲什麼這個表達式給我一個零輸出?C浮點除法結果舍入爲零

float x = ((1000)/(24 * 60 * 60)); 

打破這個分爲兩個部分,給出正確的結果:

float x = (1000); 
x /= (24 * 60 * 60); 
+4

這不是浮點,你的常量是整數。 –

+2

那麼,這是做什麼? 1)聲明一個'float'類型的變量'x'。 2)計算「24 * 60 * 60」,即86400. 3)計算1000/86400,這是0. 4)將0存儲在'x'中。 – immibis

+0

@immibis這個評論足以說明問題。至少,現在比所有答案都好。 –

回答

3

聲明

float x = ((1000)/(24 * 60 * 60)); 

執行以下操作:

  1. 聲明float類型的變量x
  2. 評價((1000)/(24 * 60 * 60))
    1. 評估板24*60*60這是86400
    2. 求值1000/86400是0
  3. 分配的,其結果(即0)到x

在第二步中,((1000)/(24 * 60 * 60))是零 - 除法是整數除法,因爲兩個操作數都是整數。稍後將結果分配給浮點變量的事實沒有什麼區別。

最簡單的方法是確保除法的任何一邊都是浮點數,所以它將使用浮點除法。例如,您可以將1000更改爲1000.0f

0

看到這個答案,它會給你正確的輸出

#include <stdio.h> 

int main(void) { 
    float x = (float)1000/(24 * 60 * 60); 
    printf("%f",x); 
    return 0; 
} 

輸出:0.011574 輸出還可以被看到:http://ideone.com/6bMp9r

+0

'1000f'比'(float)1000'好, –