You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 21:45:55