爲什麼這個表達式給我一個零輸出?C浮點除法結果舍入爲零
float x = ((1000)/(24 * 60 * 60));
打破這個分爲兩個部分,給出正確的結果:
float x = (1000);
x /= (24 * 60 * 60);
爲什麼這個表達式給我一個零輸出?C浮點除法結果舍入爲零
float x = ((1000)/(24 * 60 * 60));
打破這個分爲兩個部分,給出正確的結果:
float x = (1000);
x /= (24 * 60 * 60);
聲明
float x = ((1000)/(24 * 60 * 60));
執行以下操作:
float
類型的變量x
。((1000)/(24 * 60 * 60))
。
24*60*60
這是864001000/86400
是0x
。在第二步中,((1000)/(24 * 60 * 60))
是零 - 除法是整數除法,因爲兩個操作數都是整數。稍後將結果分配給浮點變量的事實沒有什麼區別。
最簡單的方法是確保除法的任何一邊都是浮點數,所以它將使用浮點除法。例如,您可以將1000
更改爲1000.0f
。
看到這個答案,它會給你正確的輸出
#include <stdio.h>
int main(void) {
float x = (float)1000/(24 * 60 * 60);
printf("%f",x);
return 0;
}
輸出:0.011574 輸出還可以被看到:http://ideone.com/6bMp9r
'1000f'比'(float)1000'好, –
這不是浮點,你的常量是整數。 –
那麼,這是做什麼? 1)聲明一個'float'類型的變量'x'。 2)計算「24 * 60 * 60」,即86400. 3)計算1000/86400,這是0. 4)將0存儲在'x'中。 – immibis
@immibis這個評論足以說明問題。至少,現在比所有答案都好。 –