我有两位小数要比较。一个是使用precision=22
和scale = 8
与NHibernate映射的db表,让我们看一下示例值,因为我可以在手表中看到它:
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;
}
}
它有效,但我真的觉得它有更聪明的东西:)
答案 0 :(得分:1)
也许你可以尝试这些线路(不确定是否最聪明)
bool iscompared = decimal.Truncate(77.472349025229M * 100000000.0M) / 100000000.0M == 77.47234902M;
返回true