程式碼:
float x, b; int m;
scanf("%f", &x);
m = (int)(1000 * x + 0.5); // 四捨五入放大 1000 倍
b = m / 1000; // 錯誤:整數除法,結果截斷為 123
printf("%f", b); // 輸出 123.000000
m 與 1000 均為 int,**整數除法** 直接捨棄小數部分,123456 / 1000 = 123,再隱式轉為 float 變 123.0。
b = m / 1000.0f; // 或 b = m * 1.0f / 1000;
任一運算元為浮點數即觸發浮點除法,保留小數部分,結果為 123.457。
float x; scanf("%f", &x);
float b = roundf(x * 1000) / 1000; // 需 #include
// 或 printf("%.3f", x); // 僅顯示三位,不改變數值
記住:**整數除法會截斷**,涉及小數運算務必讓編譯器看到浮點數字面值(.0、f 後綴)或變數。