8
ads = ads.Where(x => (x.Amount - x.Price) / (x.Amount / 100) >= filter.Persent);

x.Amount==0の場合「ゼロ除算エラーが発生しました」というエラーが発生します。

このリクエストで私のように避けることですか?

アップデート:

これは役に立ちましたが、私は決定が好きではありません:

ads = ads.Where(x => (x.Amount - x.Price) / ((x.Amount / 100)==0?0.1:(x.Amount / 100)) >= filter.Persent);

別の方法がありますか?

4

2 に答える 2

28

もちろん、いつでも一般的な安全除算法を実装して、それをずっと使用することができます

using System;

namespace Stackoverflow
{
    static public class NumericExtensions
    {
        static public decimal SafeDivision(this decimal Numerator, decimal Denominator)
        {
            return (Denominator == 0) ? 0 : Numerator / Denominator;
        }
    }

}

私が知っているnull許容でないすべての数値型に対応しているため、10進数型を選択しました。

使用法:

var Numerator = 100;
var Denominator = 0;

var SampleResult1 = NumericExtensions.SafeDivision(Numerator , Denominator );

var SampleResult2 = Numerator.SafeDivision(Denominator);
于 2012-11-06T22:08:47.353 に答える
10
ads = ads.Where(x => x.Amount != 0 &&
                    (x.Amount - x.Price) / (x.Amount / 100) >= filter.Persent);
于 2012-04-20T09:18:03.863 に答える