私は次のコードを持っています:
double a = 8/ 3;
Response.Write(a);
値2を返します。なぜですか。少なくとも1桁の小数が必要です。2.6、または2.66のようなもの。どうすればそのような結果を得ることができますか?
試す
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;
計算は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)
マイナスに向かって丸めているため、フレームワークに実装されている方法です。ただし、上記の例を使用して精度を指定する場合:
double a = 8/3.0d;
その後、丸めは実行されなくなります。
または、簡単に言えば、doubleに整数値を割り当てたため、最初に丸めが実行されました。整数を使用した操作が見られました。
8と3は整数であり、インタプリタはそれを2に丸めるためです。インタプリタに、数値は浮動小数点であると簡単にアドバイスできます。
double a = (double)8 / 3;
Coz8と3は両方ともintです。また、2つのintを含むintの除算演算子もintを返します。(カーソルがスラッシュ記号上にある場合はF12)。