2

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

77.47234902

我要比较的是:

77.472349025229

当然,严格的平等失败了。我知道我可以检查差异是否低于某个 epsilon,我只是在问,因为精度和比例是十进制表示中的第一公民,是否有最聪明的方法来进行这种比较。

编辑 刚刚详细说明@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;
        }
    }

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

4

1 回答 1

1

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

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

返回true

于 2012-03-21T10:28:32.067 回答