1

これが以前に話されていたなら、すみません、私はこれを探すのに苦労しました。

減価償却率を計算しています。私たちの計算の一部は1/寿命(月)です。私のテーブルはこのデータをdecimalフィールドに格納します。試しましたが、 (として定義されている)test = 1 / estimatedLife;の計算結果は0です。testdecimal

推定寿命は36か月だとします。したがって、1/36は0.02777778に等しくなります。

私が間違っていることについて何か考えはありますか?

ところで、私はtestをダブルに変更し、同じ結果になりました。

4

5 に答える 5

5

試す:

test = 1.0M / estimatedLife;
于 2010-03-15T19:49:30.677 に答える
5

もう1つの組み込みの代替手段は、Decimal.Divideです。

test = Decimal.Divide(1, estimatedLife);

もっと書くべきですが、かなり明確だと思います。

于 2010-03-15T19:53:39.517 に答える
2

コードは2つの整数を除算し、その結果(整数でもあります)をdecimal変数に割り当てます。

次のようdecimalに、オペランドの少なくとも1つをaにして、除算に切り替える必要があります。decimal1.0M / estimatedLife

于 2010-03-15T19:51:30.400 に答える
2

EstimatedLifeはintですよね。これを試して:

    decimal test = 1 / (decimal) estimatedLife;

または、SwDevMan81の提案を使用してください。

    test = 1.0M / estimatedLife;

問題は、整数除算が小数点以下のすべてを破棄することです。必要な結果を得るには、引数の1つを小数にする必要があります。

彼がコメントで投稿したドキュメントリンクには次のように書かれています

数値の実リテラルを10進数として扱いたい場合は、接尾辞mまたはMを使用します。

したがって、1.0Mは、「値が1.0の10進数型のリテラル」を意味します。

于 2010-03-15T19:51:41.567 に答える
2

追加するだけで、特定の精度が必要な場合(出力が小数点以下8桁に設定されていることに気づきました)、次を使用できます。

decimal test = Math.Round(1M / estimatedLife,8);
于 2010-03-15T19:59:15.063 に答える