2

奇妙な問題があります。方程式の結果をdouble変数に格納しようとしています。

double s = (((100 + 1)*(1/3))/100 + (1/3));

これにより、.67(計算機から計算された正しい値)ではなく0の値が返されます。これが発生する可能性がある理由は何ですか?

注:s = .67にすることができると言う解決策は、解決策ではありません。

前もって感謝します。

4

2 に答える 2

8

以下は整数(つまり切り捨て)除算を使用しており、その結果はゼロです。

1/3

浮動小数点除算を取得するには、いずれかの引数をdoubleに変換します。例:

1.0/3

したがって、全体的な式は次のようになります。

double s = (((100 + 1)*(1./3))/100 + (1./3));

1.と同じ1.0です。doubleare1dおよび。と同じ数を表現する他の方法1D

上記の式はに評価され0.6699999999999999ます。

于 2013-03-24T14:19:30.243 に答える
3

コンパイラは、数値をintとして認識します。

このようにしてみてください:

double s = (((100d + 1d)*(1d/3d))/100d + (1d/3d));

結果は次のようになります。

0.6699999999999999

于 2013-03-24T14:22:33.267 に答える