使用float时为什么会得到错误的结果?

时间:2010-11-11 09:19:05

标签: c# floating-point

  

可能重复:
  Why is (double)0.6f > (double)(6/10f)?
  Why is floating point arithmetic in C# imprecise?

我在C#中有以下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace StackOverflow
{
    class Program
    {
        static void Main(string[] args)
        {
            float num1 = 17.03F;
            float num2 = 17F;
            float result = num1 - num2;
            Console.WriteLine(result);
        }
    }
}

代码工作正常,但我没有得到预期的结果。有人可以解释为什么会这样吗?

4 个答案:

答案 0 :(得分:3)

我猜你引用Floating point arithmetics引起的偏差。您可以在提供的链接中阅读。

如果您确实需要使计算100%准确,则可以使用decimal代替float

答案 1 :(得分:1)

因为您使用的是float。 Float是一个非常接近的值。在比较时,请始终使用Epsilon(最大误差允许值)。

我猜你得到的结果= 0.02999999?

答案 2 :(得分:1)

浮点数学可能包含舍入近似值,请参阅本网站上的许多重复问题,或在此处阅读:

http://en.wikipedia.org/wiki/Floating_point

答案 3 :(得分:1)