可能重复:
为什么C#中的浮点运算不精确?
我一直在处理一些数字和C#,以下代码行产生的数字与预期的数字不同:
double num = (3600.2 - 3600.0);
Run Code Online (Sandbox Code Playgroud)
我预计num为0.2,但结果是0.1999999999998181.是否有任何理由产生一个接近但仍然不同的小数?
Ada*_*lph 10
这是因为double是浮点数据类型.
如果您想要更高的准确度,可以转而使用decimal.
文字后缀为decimalm,因此要使用decimal算术(并生成decimal结果),您可以将代码编写为
var num = (3600.2m - 3600.0m);
Run Code Online (Sandbox Code Playgroud)
请注意,使用a有一些缺点decimal.它是128位数据类型,而不是64位,是a的大小double.这使得它在存储器和处理方面都更加昂贵.它的范围也小得多double.