将小数与其小数位数进行一致比较

本文关键字:小数 比较 | 更新日期: 2023-09-27 18:28:34

我有两个小数要比较。一个来自一个用NHibernate映射的带有precision=22scale = 8的db表,让我们看看我在手表中看到的一个示例值:

77.47234902

我比较的是:

77.472349025229

严格的平等当然是失败的。我知道我可以检查差值是否在某个ε下,我只是想问,因为精度和小数位数是十进制表示中的第一个公民,是否有最聪明的方法来进行这样的比较。

编辑只是详细说明@V4Vendetta回复,我创建了这个扩展方法:

    public static class ScaleComparer
    {
        public static bool ScaleEquals(this decimal lhs, decimal rhs, int scale)
        {
            decimal mult = (decimal)Math.Pow(10, scale);
            return decimal.Truncate(lhs * mult) / mult == decimal.Truncate(rhs*mult)/mult;
        }
    }

它有效,但我真的觉得应该有更聪明的东西:)

将小数与其小数位数进行一致比较

也许你可以试试这些线路(不确定是否最聪明)

bool iscompared = decimal.Truncate(77.472349025229M * 100000000.0M) / 100000000.0M == 77.47234902M;

返回true