2

比較する小数点以下2桁があります。precision=221つは、とを使用してNHibernateでマップされたdbテーブルから作成されますscale = 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;
        }
    }

それは機能しますが、私は本当にもっと賢いものがあるはずだと感じています:)

4

1 に答える 1

1

たぶんあなたはこれらのラインを試すことができます(最も賢いかどうかはわかりません)

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

戻るtrue

于 2012-03-21T10:28:32.067 に答える