没有计算的双舍入误差

时间:2017-08-17 10:33:31

标签: c# floating-point rounding-error

我在带有浮点变量的C#(。Net 4.6.1)中观察到一个(对我而言)奇怪的问题。

我有一个自己的简单Point类:

public class Point
{
    public readonly double X;
    public readonly double Y;


    public Point(double x, double y)
    {
        this.X = x;
        this.Y = y;
    }

    //...

}

包含Contains方法的Rectangle类。有时 - 非常难以重现 - 当我将Point对象传递给包含Rectangle对象的方法时,X或Y的值不相同。变量之间没有计算或任何其他变化。只是得到变量值。在caling方法中,值为OK,在调用方法中,该值具有舍入误差。

calling the Contains method

inside the called Contains method

这里有什么问题? 为什么调用方法中还有另一个值?

最后,价值没有变化。因此在调用方法中,该值以后仍然可以。

提前致谢!

马斯

1 个答案:

答案 0 :(得分:0)

好吧,这是我的错。我假设Point的ToString方法显示完整的值。通常它确实如此。

public override string ToString()
{
    return $"{this.X};{this.Y}";
}

该值在调用方法中也有舍入错误。