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