为什么60.5-60.1是0.39999999999?在C#双变量中

为什么60.5-60.1是0.39999999999?在C#双变量中,c#,C#,返回值为0.39999999999而不是0.4 这是因为您使用了double:double是浮点,它不精确;另一方面,十进制是精确的。如果将两个变量都更改为十进制,则它将是精确的数字 这就是为什么在某些领域,如金融业,十进制需要精确性和精确性。关于浮点不精确性的七百五十万个其他问题没有满足你的好奇心,有什么原因吗?:-)@paxdiablo:我猜实际上只有7499999个问题,而这是遗漏的一个……看看这个链接:这是不准确的十进制也是浮点。最大的区别在于float是以2为基数的,因此只能近似以10

返回值为0.39999999999而不是0.4


这是因为您使用了double:double是浮点,它不精确;另一方面,十进制是精确的。如果将两个变量都更改为十进制,则它将是精确的数字


这就是为什么在某些领域,如金融业,十进制需要精确性和精确性。

关于浮点不精确性的七百五十万个其他问题没有满足你的好奇心,有什么原因吗?:-)@paxdiablo:我猜实际上只有7499999个问题,而这是遗漏的一个……看看这个链接:这是不准确的<代码>十进制也是浮点。最大的区别在于
float
是以2为基数的,因此只能近似以10为基数的数字,而
Decimal
是以10为基数的,它消除了由于简单近似而产生的任何错误。如果不明智地使用,它仍然容易受到精度误差的影响。双精度是精确的,因为它们具有精度。他们没有的是无限的精确性。没有无限精度的其他东西是小数:-)没有任何编码方法(实际符号除外)可以处理所有情况,例如
√2
π
e
-这些都将导致十进制类型的精度损失。另见。
double a=60.5;
double a=60.1;

Console.WriteLine(a-b);