0

私は C++ とプログラミング全般に不慣れです。手を汚すためだけに小さなプログラムを試しています。以下は、円錐の体積を計算するために作成したプログラムです。

問題: 何をしても、出力は常に整数です。小数点以下2桁の精度にしたい。より高い精度を得るために変数を double および long double に変更しようとしましたが、何も機能しません。

どうすればこれを修正できますか? そして、なぜこれが起こっているのですか?(できれば詳しく) UNi の若手講師に聞いたことがありますが、これまで誰も適切な答えをくれませんでした。

int main (){ 
    float radius,length,volume ;
    const float PI =22/7.0f;
    cin >> radius >> length;
    volume =1/3.0f *radius*radius*length;
    cout << "Volume is " << volume <<endl;
    return 0;
}

Fedoraでg ++を使用しています

編集:私は整数を与える 50 60/70 50 /120 40 のような入力でこれを早く試しました。3 4 のような小さい入力では小数になります。

編集: setprecision() が機能します。これを送ってくれてみんなありがとう

4

3 に答える 3

4

出力マニピュレータを使用する必要がある場合があります。

http://www.cplusplus.com/reference/iostream/manipulators/setprecision/

次のようになります。

cout << "Volume is " << setprecision(10) << volume << endl;
于 2012-01-22T12:54:22.050 に答える
2

あなたのコードに問題は見当たりませんし、報告されている動作を再現することもできません。

そうは言っても、私があなただったら、次のことを試しますsetprecision()

cout << "Volume is " << setprecision(8) << volume <<endl;
于 2012-01-22T12:53:35.910 に答える
1

上記のプログラム (不足している#include <iostream>とを追加using namespace std;) は、小数点の後にいくつかの数字を生成します。小数点の後に正確に 2 桁の小数点以下を生成したい場合は、次のようなものを使用する必要があります。

std::cout << std::fixed << std::setprecision(2);

出力の前のどこか (後者のマニピュレータは で宣言されています<iomanip>)。デフォルトの精度は 6 桁を使用し、それらを最適に配分する方法を決定することです (これは、値が大きすぎたり小さすぎたりすると、出力が科学表記法になることを意味する場合があります)。

ところで、std::endl出力ストリームを本当にフラッシュしたい場合を除き、使用しないでください。の不適切な使用がstd::endl重大なパフォーマンスの問題に変わったいくつかのケースを見つけました。

于 2012-01-22T12:59:41.237 に答える