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

C# 中 Convert.ToInt32 與 (int) 強制轉換的區別:為什麼 85.63 變成 86?

     編輯:程式設計綜合問答

問題現象

代碼如下:

double mydouble = 85.63;
int myint = Convert.ToInt32(mydouble);
// 結果 myint == 86,而非預期的 85

原因解析

Convert.ToInt32() 採用「四捨五入」規則(銀行家圓整法,即 .5 向最近的偶數進位),因此 85.63 四捨五入為 86。

而 (int) 強制轉換 或 Math.Truncate() 則是直接截取整數部分,忽略小數,結果為 85。

對比示例

double d = 85.63;
Console.WriteLine(Convert.ToInt32(d)); // 86
Console.WriteLine((int)d);             // 85
Console.WriteLine(Math.Truncate(d));   // 85
Console.WriteLine(Math.Floor(d));      // 85
Console.WriteLine(Math.Round(d));      // 86(四捨五入)

最佳實踐建議

  • 若需四捨五入,使用 `Convert.ToInt32()` 或 `Math.Round()`。
  • 若需截斷小數(向零取整),使用 `(int)` 強制轉換或 `Math.Truncate()`。
  • 若需向下取整,使用 `Math.Floor()`;向上取整用 `Math.Ceiling()`。

理解各轉換方法的語義差異,能避免數據處理中的隱性 Bug。

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