使用 Decimal.Compare 和 C# 中的 == 运算符比较十进制值时,精度是否相同?

问题描述 投票:0回答:1

我正在使用 C# 中的十进制值,并且遇到了精确比较两个十进制值的需要。为此,我考虑了两种主要的比较方法:使用 Decimal.Compare 和相等 (==) 运算符。 我想澄清一下 Decimal.Compare 方法和 == 运算符在比较两个十进制值时是否提供相同级别的精度。我很好奇在什么情况下这两种比较方法的结果可能会有所不同。

我尝试过的: 我尝试使用以下示例代码来比较两个十进制值:

decimal value1 = 0.1m;
decimal value2 = 0.10m;

int compareResult = Decimal.Compare(value1, value2);
bool isEqualUsingCompare = (compareResult == 0);

bool isEqualUsingEqualityOperator = (value1 == value2);

在上面的代码中,使用 Decimal.Compare 和 == 运算符似乎表明 value1 和 value2 相等。

我的期待: 我希望了解上述两种方法在所有情况下是否始终可靠,特别是如果存在任何边缘情况,使用这两种方法进行比较的结果可能会有所不同。

c#
1个回答
0
投票

您可以查看Decimal struct的参考源。在第 381 - 389 行,您可以看到:

// Compares two Decimal values, returning an integer that indicates their
// relationship.
//
[System.Security.SecuritySafeCritical]  // auto-generated
[ResourceExposure(ResourceScope.None)]
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static int Compare(Decimal d1, Decimal d2) {
    return FCallCompare(ref d1, ref d2);
}

第 457 - 461 行:

[System.Security.SecuritySafeCritical]  // auto-generated
public bool Equals(Decimal value)
{
    return FCallCompare(ref this, ref value) == 0;
}

第 1162 - 1165 行:

[System.Security.SecuritySafeCritical]  // auto-generated
public static bool operator ==(Decimal d1, Decimal d2) {
    return FCallCompare(ref d1, ref d2) == 0;
}

即,

Decimal.Compare
Decimal.Equals
、运算符
==
以及此处未显示的所有其他比较运算符都依赖于相同的方法
FCallCompare
,因此它们都返回一致的结果。

© www.soinside.com 2019 - 2024. All rights reserved.