C ++程序输出错误的数字

时间:2013-03-10 23:55:07

标签: c++ floating-point double

这是我的计划:

 #include "stdafx.h"
 #include <iostream>

 using namespace std;

 double areaofcircle(double r)
 {
 return 3.14 * r * r;
 }

 int main()
 {
 cout << areaofcircle(5);
 }

我应该得到“78.5”的输出,但我一直得到“78.512”。到底是怎么回事?! 我也试过漂浮,但我仍然得到相同的输出。

另外只是一个附带问题,我真的需要添加“return 0;”到主要功能?

还有一个问题,我是否需要编写“using namespace std;”在每个函数里面,或者我可以把它写在一切之外,就像我一直在做的那样。

3 个答案:

答案 0 :(得分:1)

我认为你做错了什么。我在GCC编译器上尝试过相同的操作,但我确实得到了78.5。您使用的是哪种编译器?

关于您的其他问题

  1. 从main返回程序的状态总是一个好主意。通常,如果一切正常,您可以返回EXIT_SUCCESS,否则您可以返回EXIT_FAILURE。

  2. 没有必要包含使用命名空间std。相反,污染标准命名空间是不好的做法。您应该只包括您经常使用的那些功能。

  3. 阅读有关C ++的更多信息。请检查此link

    希望这有帮助。

答案 1 :(得分:1)

在VS 2008上尝试了几个实验,看看我是否会遇到类似的错误。通过将pi更改为浮点数,我得到的是78.500002622604370,这与您的问题不同但不一样。但是当pi是双倍时,我确实得到78.5。

我建议您告诉我们您正在使用的编译器和版本,然后可能有人可以提供帮助。

#include "stdafx.h"
#include <iostream>
const double pi = 3.14;


 double areaofcircle(double r)
 {
    return pi * r * r;
 }

int _tmain(int argc, _TCHAR* argv[])
{
    double temp = areaofcircle(5);
    std::cout << temp;
    return 0;
}

答案 2 :(得分:1)

你正在传递一个整数(5)的文字,所以某处需要隐式转换才能将它变成一个double。通过5.0会更好。双打的C ++默认值不需要说明符,所以你的3.14就可以了。 (指定一个浮点数需要3.14f)。也就是说,我尝试了5和5.0,并且在我的编译器上都获得了78.5次。

你如何使用std命名空间很好,但正如所指出的那样,它确实将所有标准命名空间带入了范围。我在教材中看到了很多。最好只使用 using std::cout;

或者只是将std :: cout明确添加到所有用途。但是,从编译的角度来看,没有任何“错误”。