2

ユーザー入力の高さと半径に基づいて円錐の体積を計算する一連のコードを作成しようとしています (以下を参照)。

私の問題は、答えが間違っていることです(ただし、長い道のりではありません)。高さ = 5、半径 = 10 の例を使用すると、500 のコードから答えが得られます (円周率を正確に 3 として扱います) が、手動で計算すると ~523 になります。

pi を宣言している変数の型 (double から long に変換) と関係があると思いますが、他の変数型の組み合わせを機能させるのに苦労しました。

pi を適切に (少なくとも 5 桁または 6 桁まで) 格納する、以下の正しいバージョンは何ですか?

                double piDouble = Math.PI;

                long height = Long.parseLong(heightString);
                long pi = (new Double(piDouble)).longValue();
                long radius = Long.parseLong(radiusString);

                long volumeBase = (pi*(radius*radius)*height) / 3;
4

2 に答える 2

8

long pi = (new Double(piDouble)).longValue();3は long なので、正確に に等しくなります。

さらに精度が必要な場合は、 double を使用し、最後にのみ丸めます。これにより、期待どおりの結果が得られるはずです。

double piDouble = Math.PI;
long height = Long.parseLong(heightString);
long radius = Long.parseLong(radiusString);
double volumeBase = (piDouble * (radius * radius) * height) / 3;

必要に応じて、結果を丸めることができます。

long roundedDownVolume = (long) volumeBase; //round down
long roundedVolume = Math.round(volumeBase); //or round to the closest long
于 2012-10-08T13:15:30.473 に答える
0

この種の演算には BigDecimal を使用する必要があります。

于 2012-10-08T13:17:29.717 に答える