C# の基本的な乗算と除算に問題があります。
((150 / 336) * 460) に対して 0 を返しますが、答えは 205.357142857 になるはずです。
これは、(150/336) が小数であり、C# がこれを 0 に切り捨てるためだと推測されます。
すべての小数点以下の桁数を考慮して、これを正しく計算するにはどうすればよいですか?
C# の基本的な乗算と除算に問題があります。
((150 / 336) * 460) に対して 0 を返しますが、答えは 205.357142857 になるはずです。
これは、(150/336) が小数であり、C# がこれを 0 に切り捨てるためだと推測されます。
すべての小数点以下の桁数を考慮して、これを正しく計算するにはどうすればよいですか?
いいえ、150/336 は整数除算であり、結果もint
.
したがって、両方のいずれかが 10 進数でなければなりません。
double d = 150d / 336;
参照: 7.7.2 除算演算子
除算は結果をゼロに向けて丸め、結果の絶対値は、2 つのオペランドの商の絶対値よりも小さい可能な最大の整数です。2 つのオペランドが同じ符号を持つ場合、結果はゼロまたは正になり、2 つのオペランドが反対の符号を持つ場合、結果はゼロまたは負になります。
((150 / 336) * 460)
これらの数値は整数であり、小数点以下の桁数はありません。150 / 336
は整数演算で に評価されるため、0
何を掛けても になり0
ます。
各数値を明示的に double にする必要があります。このようなもの:
((150d / 336d) * 460d)
float/double ではなく整数演算を行っています。浮動小数点倍精度定数を指定するには、接尾辞「d」を使用します。
double d = (150d / 336d) * 460d;
150/336 は結果として int を与えるため、0 になります。除算が必要なので、結果として double が得られます。
(((double)150 / 336) * 460)