結論:
當所需的精度由小數點右側的位數決定時,decimal 類型是合適的。 此類數字通常用于財務應用程序、貨幣金額(例如 $1.00)、利率(例如 2.625%)等。 精確到只有一個小數用 decimal 類型處理會更準確:例如,0.1 可以由 decimal 實例精確表示,而沒有精確表示 0.1 的 double 或 float 實例。 由于數值類型存在這種差異,因此當你對十進制數據使用 double 或 float 時,算術計算可能會出現意外的舍入錯誤。
可在表達式中混合使用整型類型和 decimal 類型。 在這種情況下,整型類型隱式轉換為 decimal 類型。
不能在表達式中將 decimal 類型與 float 和 double 類型混合使用。 在這種情況下,如果你想要執行算術運算、比較運算或相等運算,則必須將操作數顯式轉換為 decimal 或反向轉換
使用場景:
考慮使用Decimal,如果:
1、如果數字必須加起來正確或平衡,對于金融應用程序它可以提供高水平的準確性,并且易于避免舍入錯誤
例如,用于財務金額計算,最終balance平賬是很重要的不能有丁點誤差
考慮使用Double或Float,如果:
1、當優化性能比確保準確度更重要時,可以使用 double 代替 decimal。 然而,除了大多數計算密集型應用程序之外,所有應用程序都不會注意到性能上的任何差異。
2、避免使用 decimal 的另一個可能原因是為了最大限度地降低存儲需求。 例如,ML.NET 使用 float,因為對于非常大的數據集,4 個字節與 16 個字節之間的差異合乎情理。
Float - 32 bit (7 digits)
Double - 64 bit (15-16 digits)
Decimal - 128 bit (28-29 significant digits)
3、Float主要用于圖形庫中,因為對處理能力的要求非常高,也用于可能承受舍入誤差的情況。
參考:
Types - C# language specification | Microsoft Docs
Floating-point numeric types - C# reference | Microsoft Docs