C#中的计算不正确

时间:2017-05-04 09:07:42

标签: c# math floating-point floating-accuracy calculation

为什么(0.406 * 10000.0)在C#

中返回4060.0000000000005而不是4060.0

我写了一个检查不的功能。双值及以下的小数是我正在使用的代码。当d is 0.406的值和n is 4的值以及函数返回true而不是false

时,会出现上述句子中描述的问题

我愿意使用备用解决方案。

public static bool HasMoreThanNDecimals(double d, int n)
{
    return !(d * (double)Math.Pow(10, n) % 1 == 0);
}

1 个答案:

答案 0 :(得分:2)

只需使用十进制类型而不是双精度来获得更高的精度即可获得所需的结果。

https://social.msdn.microsoft.com/Forums/vstudio/en-US/921a8ffc-9829-4145-bdc9-a96c1ec174a5/decimal-vs-double-difference?forum=csharpgeneral