C#中double和decimal计算的区别

Differences in double and decimal calculations in C#

双精度和小数计算得到不同的结果...

double value1 = 280.585 - 280.50;
decimal value2 = Convert.ToDecimal(280.585) - Convert.ToDecimal(280.50);
Console.WriteLine(value1);
Console.WriteLine(value2);

输出:

Double:0.0849999999999795
Decimal:0.085

但是 int 和 long 怎么会给出相同的结果呢?

int value1 =  2+2;
long value2 = 2+2;
Console.WriteLine(value1);
Console.WriteLine(value2);

输出:

4
4

280.585 和 280.5 都可以精确表示为短小数,它们的区别也是如此。

假设double表示为IEEE 754 64位二进制浮点数,最接近280.585的double是280.584999999999997953636921010911464691162109375。 280.5 可以精确表示为 double。他们的区别是0.08499999999997953636921010911464691162109375.

在 2+2=4 计算的情况下,所有数字都可以在 intlong 中准确表示,因此两者都应该得到准确的答案。