为什么 C# 中 0.1 + 0.2 == 0.3 何时使用 float 类型

vol*_*olk 5 c# floating-point precision floating-accuracy

在许多编程语言中,像 0.1 + 0.2 这样的运算并不等于 0.3,而是 0.30000000000000004。因此,像 0.1+0.2 == 0.3 这样的检查将返回 false。

就我而言,这是由于 IEE 754 标准,这就是它在许多语言中很常见的原因。

在 C# 中也可以找到相同的行为。我使用下一个代码片段来测试它:

static void Main(string[] args)
    {
        double x = 0.2;
        double y = 0.1;
        double res = 0.3;
        double z = x + y;

        Console.WriteLine("bool result = {0}", z == res); // outputs false
        Console.ReadLine();
    }
Run Code Online (Sandbox Code Playgroud)

但如果我使用相同的代码但使用浮点变量,一切都会以其他方式工作:

static void Main(string[] args)
    {
        float x = 0.2f;
        float y = 0.1f;
        float res = 0.3f;
        float z = x + y;

        Console.WriteLine("bool result = {0}", z == res); // outputs true
        Console.ReadLine();
    }
Run Code Online (Sandbox Code Playgroud)

谁能给我解释一下吗?