web-dev-qa-db-ja.com

C#はそれ自体で部門を切り捨てています

C#で除算すると、自動的に切り捨てられます。次の例をご覧ください。

double i;
i = 200 / 3;
Messagebox.Show(i.ToString());

これにより、「66」を含むメッセージボックスが表示されます。 200/3は実際には66.66666〜です。

この切り捨てを回避して66.6666667のような数値を維持する方法はありますか?

32
ONOZ

_i = 200 / 3_は整数除算を実行しています。

次のいずれかを試してください。

i = (double)200 / 3

または

_i = 200.0 / 3_

または

_i = 200d / 3_

定数の1つをdoubleとして宣言すると、double除算演算子が使用されます。

44
rsbarro

200/3は整数除算であり、整数になります。

200.0/3.0を試す

6
John Boker

希望する10進ポニー数のフォーマット文字列を指定できます。

double i;
i = 200 / 3.0;
Messagebox.Show(i.ToString("F6"));
5
Petar Ivanov

200 / 3これは整数除算です。への変更: 200.0 / 3浮動小数点除算にします。

4
ybungalobill

答えは実際には66.666ですが、起こっているのは200/3が計算されて整数になるということです。その後、整数はフロートに配置されます。数学自体は整数の数学として起こっています。浮動小数点にするには、200.0/3を使用します。0を指定すると、200が浮動小数点として扱われ、浮動小数点演算が実行されます。

3
JoshuaRogers

そのアクションで発生するdoubleとintを除いて、doubleを正確な単位として考えています。精度を重視する場合は、decimalデータ型を使用してください。

この回答の詳細: decimal vs double!-どちらをいつ使用すればよいですか?

3
sclarson

double i = 200.0/3;

double i =((double)200)/ 3;

発生するのは、2つの整数が整数除算を実行し、整数の回答が浮動小数点に割り当てられることです。これを回避するには、常に数値の1つをdoubleとしてキャストします。

2
Chad

これを試して

i = 200d/3d;

丸められません。

1
Bala R

200と3はどちらも整数なので、結果は整数になります。それらの1つを10進数に変換します。

0
Mike M.