0

私は次のコードを持っています:

double a = 8/ 3;
Response.Write(a);

値2を返します。なぜですか。少なくとも1桁の小数が必要です。2.6、または2.66のようなもの。どうすればそのような結果を得ることができますか?

4

5 に答える 5

9

試す

double a = 8/3.0d;

また

double a = 8.0d/3;

正確な答えを得るために。

式でa = 8/3は両方のオペランドがintそうであるため、結果はint、に格納されているという事実に関係ありませんdouble。結果は常に上位のデータ型のオペランドになります

編集

答える

8と3は変数から取得します。ある種のキャストはできますか?

値が変数からのものである場合は、オペランドの1つを次のdoubleようにキャストできます。

int b = 8;
int c = 3;
double a = ((double) b) /c;
于 2012-09-10T10:18:22.560 に答える
3

計算はdoubleではなく整数型で行われているためです。それを二重に使用するには:

double a = 8d/ 3d;
Response.Write(a);

または

double a = 8.0/ 3.0;
Response.Write(a);

オペランドの1つはd、小数点を使用または指定することにより、明示的にdoubleとしてマークする必要があります0

または、必要に応じて、計算の前にそれらを2倍にキャストできます。一方または両方のオペランドをdoubleにキャストできます。

double a = ((double) 8)/((double)3)
于 2012-09-10T10:19:04.850 に答える
0

マイナスに向かって丸めているため、フレームワークに実装されている方法です。ただし、上記の例を使用して精度を指定する場合:

double a = 8/3.0d;

その後、丸めは実行されなくなります。

または、簡単に言えば、doubleに整数値を割り当てたため、最初に丸めが実行されました。整数を使用した操作が見られました。

于 2012-09-10T10:19:36.967 に答える
0

8と3は整数であり、インタプリタはそれを2に丸めるためです。インタプリタに、数値は浮動小数点であると簡単にアドバイスできます。

double a = (double)8 / 3;
于 2012-09-10T10:23:58.197 に答える
0

Coz8と3は両方ともintです。また、2つのintを含むintの除算演算子もintを返します。(カーソルがスラッシュ記号上にある場合はF12)。

于 2012-09-10T10:33:59.607 に答える