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 计算的情况下,所有数字都可以在 int
或 long
中准确表示,因此两者都应该得到准确的答案。
双精度和小数计算得到不同的结果...
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 计算的情况下,所有数字都可以在 int
或 long
中准确表示,因此两者都应该得到准确的答案。