0.35 + 0.32 = 0.66999999999999993
0.35 + 0.31 = 0.65999999999999992
0.25 + 0.21 = 0.45999999999999996
十進制小數如 0.35、0.32 在二進制中多為無限循環小數(如 0.35 = 0.0101100110011...₂),double (64位) 僅能近似存儲,運算時誤差累積。
decimal a = 0.35m, b = 0.32m;
Console.WriteLine(a + b); // 精確輸出 0.67
decimal 為 128 位十進制浮點數,專為財務/精確計算設計。m 表示 decimal,避免隱式轉型丟失精度。| 類型 | 位數 | 進制 | 適用場景 | 性能 |
|---|---|---|---|---|
| float | 32 | 二進制 | 圖形、科學計算、可容忍誤差 | 最快 |
| double | 64 | 二進制 | 通用科學計算、默認實數類型 | 快 |
| decimal | 128 | 十進制 | 貨幣、稅率、精確業務計算 | 較慢 (軟件模擬) |
decimal(18,2) / money,ORM 映射為 decimal。ToString("F2") 或 String.Format("{0:C}", val) 格式化。double 與 decimal 混合運算,需顯式轉型 (decimal)dVal。