编程:什么时候应该使用Decimal而不是double?


编程:什么时候应该使用Decimal而不是double?

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

【编程:什么时候应该使用Decimal而不是double?】


    推荐阅读