C++程序没有按预期运行,双重转换是不应该的

Jos*_*eph 3 c++ precision iostream rounding visual-studio-2010

我正在制作一个程序,用不同的小数位来舍入数字,所以作为一个例子,2001.3666最终将成为2001.37,我设法通过添加0.005然后100次并转换为int然后再分为100来完成这项工作.

一切都很好,没有问题,有一些乐趣制作一些循环和东西,但然后一切都变得奇怪.

你看到那个程序的第一行重复用户输入的内容开始显示圆形图而不是用户输入的实际数字.

过了一会儿,我得出的结论是,这不是我的代码,因为我开始了一个新项目,并迅速编写了这段代码:

#include <iostream>
#include <string> 
using namespace std;


int main()
{
  cout << "enter: ";
  double numberWithDecimalPlaces;
  cin >> numberWithDecimalPlaces;
  cout << "you entered " << numberWithDecimalPlaces << endl;

  system("pause");
  return 0; 
}
Run Code Online (Sandbox Code Playgroud)

我输入2001.3666并且程序转到换行符,即使我没有编入代码并回复2001.37

它的确切输出是:

enter: 2001.3666
you entered 2001.37
Run Code Online (Sandbox Code Playgroud)

现在这是一个新项目中的全新程序,没有任何与我之前项目相同的变量名称,并且用户输入数字正在四舍五入,除非cin >>变量自动舍入,我发现它看起来不太像一些代码从早期的程序仍然在内存中并与此代码冲突.

哪个再也不太可能了?

我在win7上使用visual studio 2010

Nei*_*ant 7

C++中cout的默认精度是6位数,因此2001.3666将显示为2001.37,但201.3666应显示为201.367.

您可以像这样增加精度:

#include <iomanip>
...
cout << "you entered " << setprecision(10) << numberWithDecimalPlaces << endl;
Run Code Online (Sandbox Code Playgroud)