C# 将小数与其刻度保持一致

C# 将小数与其刻度保持一致,c#,nhibernate,cts,C#,Nhibernate,Cts,我有两个小数点要比较。一个来自一个db表,该表使用NHibernate映射,精度为22和比例为8,让我们看一个示例值,正如我在手表中看到的那样: 77.47234902 我比较的是: 77.472349025229 当然,严格的平等是失败的。我知道我可以检查差值是否在某个ε下,我只是问,既然精度和尺度是十进制表示法中的第一公民,是否有最聪明的方法来进行这样的比较 编辑 在详细阐述@V4Vendetta回复时,我创建了以下扩展方法: public static class ScaleC

我有两个小数点要比较。一个来自一个db表,该表使用NHibernate映射,精度为
22
比例为8
,让我们看一个示例值,正如我在手表中看到的那样:

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;
        }
    }

这是可行的,但我真的觉得应该有更聪明的方法:)

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


return
true

经过一点思考后,我仍然认为
a-b
是最聪明/最快的,任何“内部”函数都可能使用相同的方法。我将详细说明它只是为了使其可配置,但这是目前为止的唯一方法,谢谢!
bool iscompared = decimal.Truncate(77.472349025229M * 100000000.0M) / 100000000.0M == 77.47234902M;