Avatar ·

C#中的Decimal与Double:选择哪种数据类型以及何时使用?

大家好!我是C#新手,在编写电商计算器时遇到了货币计算数据类型选择的问题。 我有一个简单的代码: ```csharp double price = 19.99; double tax = 0.21; double total = price * (1 + tax); Console.WriteLine(total); // 输出类似24.1879...而不是24.1879 ``` 我期望得到精确的24.1879,但有时会出现像24.187899999999997这样的奇怪尾数。这种情况并非总是发生,但频率足以破坏价格比较逻辑。 我搜索后发现有一个`decimal`类型,但不理解区别。两者似乎都存储小数。当我将`double`替换为`decimal`时: ```csharp decimal price = 19.99m; decimal tax = 0.21m; decimal total = price * (1 + tax); Console.WriteLine(total); // 24.1879 ``` 一切变得完美。但我听说`decimal`更慢且占用更多内存。 问题: 1. `double`和`decimal`之间的根本区别是什么? 2. 何时应该使用