C#で除算すると、自動的に切り捨てられます。次の例をご覧ください。
double i;
i = 200 / 3;
Messagebox.Show(i.ToString());
これにより、「66」を含むメッセージボックスが表示されます。 200/3は実際には66.66666〜です。
この切り捨てを回避して66.6666667のような数値を維持する方法はありますか?
_i = 200 / 3
_は整数除算を実行しています。
次のいずれかを試してください。
i = (double)200 / 3
または
_i = 200.0 / 3
_
または
_i = 200d / 3
_
定数の1つをdoubleとして宣言すると、double除算演算子が使用されます。
200/3は整数除算であり、整数になります。
200.0/3.0を試す
希望する10進ポニー数のフォーマット文字列を指定できます。
double i;
i = 200 / 3.0;
Messagebox.Show(i.ToString("F6"));
200 / 3
これは整数除算です。への変更: 200.0 / 3
浮動小数点除算にします。
答えは実際には66.666ですが、起こっているのは200/3が計算されて整数になるということです。その後、整数はフロートに配置されます。数学自体は整数の数学として起こっています。浮動小数点にするには、200.0/3を使用します。0を指定すると、200が浮動小数点として扱われ、浮動小数点演算が実行されます。
そのアクションで発生するdoubleとintを除いて、doubleを正確な単位として考えています。精度を重視する場合は、decimalデータ型を使用してください。
この回答の詳細: decimal vs double!-どちらをいつ使用すればよいですか?
double i = 200.0/3;
double i =((double)200)/ 3;
発生するのは、2つの整数が整数除算を実行し、整数の回答が浮動小数点に割り当てられることです。これを回避するには、常に数値の1つをdoubleとしてキャストします。
これを試して
i = 200d/3d;
丸められません。
200と3はどちらも整数なので、結果は整数になります。それらの1つを10進数に変換します。