结论:
当所需的精度由小数点右侧的位数决定时,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