未经计算的双舍入误差

double rounding error without calculation

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

我有一个简单的观点class:

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


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

    //...

}

和一个包含方法的矩形 class。有时 - 很难重现 - 当我将 Point 对象传递给 Rectangle 对象的 Contains 方法时,X 或 Y 的值不相同。变量之间没有任何计算或任何其他变化。只是获取变量值。在调用方法中,该值正常,在被调用方法中,该值存在舍入误差。

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

最后这个值没有改变。所以在调用方法中这个值后面还是可以的。

提前致谢!

马斯

好吧,那是我的错误。我假设 Point 的 ToString 方法显示了完整的值。通常是这样。

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

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