2012-01-22 86 views
0

我是C++和一般编程的新手。我正在尝试一些小程序,只是为了弄脏我的手。以下是我为计算锥体的体积而创建的程序。C++浮点问题

问题:无论我做什么输出总是一个整数。我想把它精确到两位小数点。我试过把变量加倍和加倍,以获得更高的精度,没有任何工作。

我该如何解决这个问题?为什么会发生这种情况? (详细如有可能)到目前为止,我甚至在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

EDIT使用克++:我想这earlyer具有输入像50 60/70一百二十零分之五十〇40其给出整数。较小的输入如3 4给出小数。

编辑:setprecision()的作品。感谢大家发送这个

+3

该代码打印大量小数。 (而且PI的近似值很弱。) – Mat

+0

OMG,它是真的O.O http://thedailywtf.com/Articles/The-Object-Test,-a-New-PI,-and-More-SHEEIT.aspx –

回答

1

上面发布的程序(将th缺失#include <iostream>using namespace std;)会在小数点后为我生成几位数字。如果你想让它小数点后产生完全相同两位小数,你需要使用这样的事情:

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

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

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

2

我没有看到你的代码有什么问题,我不能重现你正在报告的行为。

话说回来,如果我是你,我会用setprecision()实验:

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