gpt4 book ai didi

c# - 将 double 与零进行比较时等于与 ==

转载 作者:太空宇宙 更新时间:2023-11-03 19:28:02 25 4
gpt4 key购买 nike

我正在尝试比较 double 值以查看它是否等于零。以下将起作用:

Assert.IsTrue(0d==0);

但是这会失败:

Assert.IsTrue(Equals(0d,0));

我认为第二个参数 (0) 被视为整数。但是,我不明白为什么 Equals(0d, 0) 的计算结果为假,而 0d==0 为真。它不能四舍五入,因为两个值都直接输入为零。

最佳答案

直觉上就像“他们不是 double ”一样简单。

但是,如果您想深入了解,Object.Equals(您在第二个示例中调用的静态方法)是这样的:

[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
public static bool Equals(object objA, object objB)
{
return ((objA == objB) || (((objA != null) && (objB != null)) && objA.Equals(objB)));
}

这两个引用不相等,null 也不相等,所以 Double.Equals 被虚拟调用:

public override bool Equals(object obj)
{
if (!(obj is double))
{
return false;
}
double d = (double) obj;
return ((d == this) || (IsNaN(d) && IsNaN(this)));
}

参数不是double 所以它返回false

这取自 mscorlib for .NET 4.0 64-bit。

关于c# - 将 double 与零进行比较时等于与 ==,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7114606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com