首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言浮點數保留三位小數:整數除法截斷導致歸零,需轉浮點再除

     編輯:程式設計綜合問答

程式碼:

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 後綴)或變數。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved