Программа на C ++ не работает должным образом, double конвертируется, когда этого не должно быть - PullRequest
3 голосов
/ 11 августа 2010

Я делал программу, которая округляет числа с различными десятичными знаками, так что в качестве примера 2001.3666 получился бы как 2001.37, мне удалось сделать эту работу, добавив 0,005, затем умножив на 100 и преобразовав в целое число, а затем снова разделив на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; 
}

Я набираю в 2001.3666 иПрограмма переходит на новую строку, хотя я не кодировал это и отвечает с 2001.37

, ее точный вывод:

enter: 2001.3666
you entered 2001.37

теперь это совершенно новая программа в новом проекте безлюбое из тех же имен переменных, что и в моем более раннем проекте, и цифра пользовательского ввода округляется, если только переменная cin >> не округляется автоматически, что мне кажется маловероятным, что какой-то код из более ранней программы все еще находится в памяти и конфликтует с этимкод.

что опять-таки вряд ли верно ??

Я использую Visual Studio 2010 на win7

Ответы [ 2 ]

7 голосов
/ 11 августа 2010

Точность по умолчанию для cout в C ++ составляет 6 цифр, поэтому 2001.3666 будет отображаться как 2001.37, а 201.3666 должен отображаться как 201.367.

Вы можете увеличить точность следующим образом:

#include <iomanip>
...
cout << "you entered " << setprecision(10) << numberWithDecimalPlaces << endl;
3 голосов
/ 11 августа 2010

Числа часто округляются при отображении, но вы можете контролировать, сколько. Читать http://www.cplusplus.com/reference/iostream/manipulators/setprecision/

...