奇妙な問題があります。方程式の結果をdouble変数に格納しようとしています。
double s = (((100 + 1)*(1/3))/100 + (1/3));
これにより、.67(計算機から計算された正しい値)ではなく0の値が返されます。これが発生する可能性がある理由は何ですか?
注:s = .67にすることができると言う解決策は、解決策ではありません。
前もって感謝します。
以下は整数(つまり切り捨て)除算を使用しており、その結果はゼロです。
1/3
浮動小数点除算を取得するには、いずれかの引数をdoubleに変換します。例:
1.0/3
したがって、全体的な式は次のようになります。
double s = (((100 + 1)*(1./3))/100 + (1./3));
1.
と同じ1.0
です。double
are1d
および。と同じ数を表現する他の方法1D
。
上記の式はに評価され0.6699999999999999
ます。
コンパイラは、数値をintとして認識します。
このようにしてみてください:
double s = (((100d + 1d)*(1d/3d))/100d + (1d/3d));
結果は次のようになります。
0.6699999999999999