#include <stdio.h>
int main(void)
{
double aRate[10] = { 0.0, 0.1, 0.25, 0.5, 0.5, 0.6, 0.65, 0.8, 0.82, 0.97};
int nAge = 0, i = 0, nFee = 1000;
int a = 0;
printf("%d : \t%d \n", i, (int)(nFee*aRate[2]));
return 0;
}
此代碼的結果是0:250,如所預期的,但如果我省略這樣的括號,這段代碼有什麼區別?
printf("%d : \t%d \n", i, (int)nFee*aRate[2]);
那麼結果是0:0
爲什麼
printf("%d : \t%d \n", i, (int)(nFee*aRate[2]));
和
printf("%d : \t%d \n", i, (int)nFee*aRate[2]);
不同?
是否與優先順序有關?
它與UB有關,在第二種情況下,您正在讀取雙精度型的低32位。 250.000是* IEEE754 *中的* 406f400000000000 *。 –
這是括號的差異。在第一次嘗試中,您將'nFree * aRate [2]'的值轉換爲int,然後將其打印出來。你的第二次嘗試是'double',那麼你不能使用'%d'來打印值 –
你的編譯器不會對第二種情況發出警告嗎? – alk