C#中Decimal.Compare与==运算符比较decimal值的精度是否一致?
C#中Decimal.Compare与==运算符的精确比较一致性
核心结论:Decimal.Compare方法和==相等运算符在所有场景下的比较结果完全一致,不存在任何二者结果不同的边缘情况。
为什么二者表现完全同步?
C#里decimal类型的==运算符底层就是直接调用Decimal.Compare方法实现的。看.NET的源码就能发现,相等运算符的逻辑很简单:当Compare(a, b)返回0时,就判定两个值相等,否则不相等。简化后的实现大概是这样:
public static bool operator ==(decimal d1, decimal d2) { return Decimal.Compare(d1, d2) == 0; }
关于你测试的示例
你测试的0.1m和0.10m被判定为相等,是因为decimal会忽略末尾无意义的零。它的内部存储包含符号、有效数字和缩放因子,只要两个值代表的实际数值相同,哪怕缩放因子不一样(比如0.1m的缩放因子是1,0.10m是2),Compare和==都会判定它们相等——毕竟它们是同一个精确数值。
所有场景下的可靠性
不管是常规数值、边界极值(比如decimal.MinValue、decimal.MaxValue)、各种形式的零值(0m、0.000m),还是经过复杂运算后的decimal结果,Decimal.Compare和==的比较结果都完全一致。你完全可以放心使用其中任意一种方式做精确比较。
内容的提问来源于stack exchange,提问作者ExplorerKS
相关产品推荐
相关产品推荐

