2012-03-21 108 views
2

我有兩位小數來比較。一來形成映射與NHibernate與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; 
     } 
    } 

它的工作原理,但我真的覺得there'shoud是一些聰明:)

+0

經過一段時間的思考,我仍然認爲'a - b <ε是最聰明/最快的,任何「內部」函數都可能使用相同的方法。 – nobody 2012-03-21 10:44:20

回答

1

也許你可以試試在這些線路上(不知道是否最聰明)

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

return true

+0

將闡述它只是爲了配置,但是到現在爲止的唯一方法,謝謝! – 2012-03-21 11:23:47