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. 何时应该使用