2012-03-21 11 views
2

私は比較する小数点が2つあります。一つはprecision=22scale = 8でNHibernateのでマッピングされたDBテーブルを形成しています、私は時計でそれを見ることができるように値の例を見てみましょう:スケールとの小数点の比較

77.47234902 

私はとの比較だものである:

77.472349025229 

もちろん厳密な平等は失敗します。私は、違いが特定のイプシロンの下にあるかどうかを確認することができることを知っています。私は精度とスケールが最初の市民であることを尋ねているだけです。

EDIT はちょうど私が、この拡張メソッドを作成する@ 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

答えて

1

ことを感じますこれらの行に表示されます(最もスマートな場合はわかりません)

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

返信true

+0

はそれを構成可能にするために説明しますが、これまでの唯一の方法です、ありがとう! –

関連する問題