c ++浮点问题

时间:2012-01-22 12:49:52

标签: c++ g++ floating-point-precision

我是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()有效。感谢大家发送这个

3 个答案:

答案 0 :(得分:4)

您可能需要使用输出操纵器:

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

所以它看起来像:

cout << "Volume is " << setprecision(10) << volume << endl;

答案 1 :(得分:2)

我发现您的代码没有任何问题,我无法重现您报告的行为。

话虽如此,如果我是你,我会尝试setprecision()

cout << "Volume is " << setprecision(8) << volume <<endl;

答案 2 :(得分:1)

上面发布的程序(添加缺少的#include <iostream>using namespace std;)会在小数点后面生成几位数字。如果你想让它在小数点后产生正好两位小数,你需要使用这样的东西:

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

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

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