【问题标题】:C++ program not behaving as expected, double is converting up when it shouldn't beC++ 程序没有按预期运行,double 在不应该的时候转换
【发布时间】:2010-08-11 13:24:01
【问题描述】:

我正在编写一个程序,将带有不同小数位的数字四舍五入,例如 2001.3666 最终会变成 2001.37,我设法通过添加 0.005 然后乘以 100 并转换为 int 然后再除以来完成这项工作100.

一切正常,没有问题,制作一些循环和东西也很有趣,但后来一切都变得奇怪了。

您会看到 then 程序的第一行重复用户输入的内容,开始显示舍入数字而不是用户输入的实际数字。

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

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


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

  system("pause");
  return 0; 
}

我输入 2001.3666,程序进入换行符,即使我没有在其中编码并回复 2001.37

它的确切输出是:

enter: 2001.3666
you entered 2001.37

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

这又不太可能对吗?

我在 win7 上使用 Visual Studio 2010

【问题讨论】:

    标签: c++ visual-studio-2010 rounding precision iostream


    【解决方案1】:

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

    您可以像这样提高精度:

    #include <iomanip>
    ...
    cout << "you entered " << setprecision(10) << numberWithDecimalPlaces << endl;
    

    【讨论】:

    • 感谢您的帮助,看起来像 setprecision 舍入本身,我最终花了一个小时编写代码来进行数学舍入,感谢堆的快速回复。
    【解决方案2】:

    显示时数字通常会四舍五入,但您可以控制多少。阅读http://www.cplusplus.com/reference/iostream/manipulators/setprecision/

    【讨论】:

    • 我的印象是 setprecision 只截断小数位,不会向上或向下舍入。我对此真的很陌生,我确实读过关于 setprecision 的书,但显然我正在阅读的书忽略了提及这一点。
    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 2022-12-10
    相关资源
    最近更新 更多