2017-08-17 82 views
1

我观察到一个(对我来说)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; 
    } 

    //... 

} 

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

calling the Contains method

inside the called Contains method

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

最后,数值没有变化。所以在调用方法中,以后的值仍然可以。

在此先感谢!

Maas

+4

听起来像它几乎肯定只是调试器中的显示差异。我怀疑如果你试图找到*确切的*值,你会发现它保持不变。 (例如,如果展开'intersectionPoint',或者显示'intersectionPoint.Y.ToString(“r”)'?) –

+0

是的,是我的错。我没有扩大“intersectionPoint”。 *耻* :) 我以为ToString方法显示的是完整的值。 ToString - > return $“{this.X}; {this.Y}”; – Maas

回答

0

好的,这是我的错。我推测Point的ToString方法显示了完整的值。通常它。

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

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