3

データ型について学ぶことはたくさんあると思います。なぜこれが起こるのか

double result = ((3/8)*100).ToString();

それはゼロを与えます.. 37,5でなければなりません... :(

4

11 に答える 11

12

3/8 は整数除算を実行し、結果は 0 です

double result = ((3.0/8)*100);

するべきです。

ちなみに、 ((3.0/8)*100).ToString() を実行すると、double ではなく String が取得されます。

于 2009-04-01T09:15:31.793 に答える
6

コンパイラに浮動小数点除算を実行させる必要があります。

double result = (((double)3/8)*100);

それ以外の場合、整数除算が実行され、3/8 はゼロになります。

于 2009-04-01T09:15:18.253 に答える
4
double result = ((3.0/8.0)*100);

やるべきです。浮動小数点除算ではなく、整数除算を実行していました。

于 2009-04-01T09:15:32.057 に答える
2

3 と 8 は整数なので、3/8 = 0 です。

使用する:

string result = ((3d/8d)*100d).ToString();
于 2009-04-01T09:15:59.437 に答える
2

あなたの式は整数のみを含み、3/8 は 0 です。

浮動小数点式が必要な場合は、式の少なくとも 1 つの要素が浮動小数点でなければなりません。

最も簡単な解決策は次のとおりです。

double result = (100.0 * 3/8)

除算の前に乗算を行うと精度が向上するため、100 の因数を最初に置いていることに注意してください。

あと、toString()がおかしい??

于 2009-04-01T09:17:24.440 に答える
1

整数除算 (3/8) は 0 になります。浮動小数点値を使用する場合は、プログラミング言語 (3.0/8.0 または 3f/8f または 3d/8d または言語で許可されているもの) にそれを明確にしてください。

于 2009-04-01T09:17:16.640 に答える
1

3 と 8 は整数なので、別の方法でキャストしない限り、3/8 の結果も整数になります。

したがって、3/8 = 0 です。

于 2009-04-01T09:17:16.717 に答える
1

ユニコーンは 3 を取り除き、0 に置き換えました。

これが本当の質問である可能性が低い場合... 3/8 は 0 に切り捨てられます。0* 100 = 0.

于 2009-04-01T09:17:18.823 に答える
1

浮動小数点ではなく、整数演算が使用されたためです。

あなたが書い((3/8)*100)たが、その式の定数はどれも非整数型を持っていません。したがって、コンパイラはそれを (正しく) 整数演算として解釈しました。3/8 は 1 より小さいため、式は 0 に評価されます。

簡単な修正は、((3./8.)*100.)代わりに書くことです。実際には、混合型式の規則により、3 または 8 のいずれかを浮動小数点値にすれば十分です。

于 2009-04-01T09:18:46.403 に答える
0

除算の 3 と 8 は整数リテラルであるため、整数除算が実行され、3 / 8 はゼロに評価されます。それらを 3.0 と 8.0 に置き換えるか、適切なデータ型サフィックスを使用すると (使用している言語を特定しません)、計算が機能します。

于 2009-04-01T09:16:16.457 に答える
0

3/8 = 0

3.0/8.0 = 0.375

于 2009-04-01T09:18:20.663 に答える