0

私は10進関数を持っています:

public decimal NGD(long TotalPages, long XHits, long YHits, long BothHits)
{
    return ((Math.Max(XHits, YHits)-BothHits)/(TotalPages - Math.Min(XHits, YHits)));
}

引数を出力すると、NGD(44000000000,36100000,5630000,3580000)が取得さreturn ((36100000 - 3580000 )/(44000000000 - 5630000));れます。これは、アプリケーションでは0.00073918549であるはずのときに0を取得します。

4

3 に答える 3

2

整数除算を実行していますが、これは切り捨てられた整数のみを返すことができます。

1つのオペランドを非整数型(おそらくdecimal)にキャストする必要があります。

于 2013-03-10T15:02:04.500 に答える
2

これは、結果を切り捨てる整数除算を使用しているためです。return ((decimal)(36100000 - 3580000 )/((decimal)(44000000000 - 5630000)));10進数の除算に使用します。

于 2013-03-10T15:03:01.220 に答える
0

すべての算術演算は、整数型であるlongSystem.Int64)を使用して行われます。除算が終了した後(整数の結果が得られた後)にのみ、商はに変換されます。decimal

配当(またはその主要な用語)をdecimalSystem.Decimal)にキャストすることを検討してください。その後、他のすべての値は、途中でlong自動的に「プロモート」されます。decimal

もちろん、代わりに1つのパラメーター(またはすべてのパラメーター)をタイプに変更することもできますdecimallong型の式を型のメソッド引数に変換するために明示的なキャストは必要ありませんdecimal

于 2013-03-10T15:04:19.327 に答える