1

C# の基本的な乗算と除算に問題があります。

((150 / 336) * 460) に対して 0 を返しますが、答えは 205.357142857 になるはずです。

これは、(150/336) が小数であり、C# がこれを 0 に切り捨てるためだと推測されます。

すべての小数点以下の桁数を考慮して、これを正しく計算するにはどうすればよいですか?

4

5 に答える 5

11

いいえ、150/336 は整数除算であり、結果もint.

したがって、両方のいずれかが 10 進数でなければなりません。

double d = 150d / 336;

参照: 7.7.2 除算演算子

除算は結果をゼロに向けて丸め、結果の絶対値は、2 つのオペランドの商の絶対値よりも小さい可能な最大の整数です。2 つのオペランドが同じ符号を持つ場合、結果はゼロまたは正になり、2 つのオペランドが反対の符号を持つ場合、結果はゼロまたは負になります。

于 2013-08-14T22:54:07.850 に答える
5
((150 / 336) * 460)

これらの数値は整数であり、小数点以下の桁数はありません。150 / 336は整数演算で に評価されるため、0何を掛けても になり0ます。

各数値を明示的に double にする必要があります。このようなもの:

((150d / 336d) * 460d)
于 2013-08-14T22:54:38.027 に答える
4

float/double ではなく整数演算を行っています。浮動小数点倍精度定数を指定するには、接尾辞「d」を使用します。

double d = (150d / 336d) * 460d;
于 2013-08-14T22:53:41.910 に答える
2

150/336 は結果として int を与えるため、0 になります。除算が必要なので、結果として double が得られます。

(((double)150 / 336) * 460)
于 2013-08-14T22:57:55.777 に答える