0

我是 C++ 和一般编程的新手。我正在尝试一些小程序,只是为了弄脏我的手。下面是我创建的用于计算圆锥体积的程序。

问题:无论我做什么,输出总是一个整数。我想把它精确到小数点后两位。我尝试将变量更改为 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>and using namespace std;)为我在小数点后产生了几位数字。如果您希望它在小数点后精确生成两位小数,则需要使用以下内容:

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

输出之前的某个地方(后一个操纵器在 中声明<iomanip>)。默认精度是使用 6 位数字并决定如何最好地分配它们(这可能意味着如果值变得太大或太小,输出将采用科学计数法)。

std::endl顺便说一句,除非您真的想刷新输出流,否则不要使用。我发现了几个案例,其中不恰当的使用std::endl变成了一个主要的性能问题。

于 2012-01-22T12:59:41.237 回答