2010-08-11 2 views
3

Я делал программу, которая округляет числа с различными десятичными знаками, так как пример 2001.3666 закончится как 2001.37, мне удалось сделать это работаем, добавляя 0.005, а затем 100 и преобразуется в int, а затем снова делится на 100.Программа на C++ не ведет себя так, как ожидалось, double конвертирует, когда она не должна быть

Все работает нормально, никаких проблем там не было, некоторые из них делали некоторые петли тоже и прочее, но потом все стало странным.

вы видите первую строку программы, которая повторяет то, что пользователь вводил, начал отображать закругленную фигуру, а не фактическую цифру, введенную пользователем.

через некоторое время я пришел к выводу, что это не мой код, потому что я начал новый проект и быстро наверстали этот код:

#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

ответ

7

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

Вы можете увеличить точность, как это:

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

Спасибо за помощь, выглядит как setprecision rounds, и я закончил тем, что потратил час на создание кода для округления с математикой, благодаря кучам для быстрых ответов. – Joseph

3

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

+0

Я был под впечатлением setprecision только обрезает знаков после запятой и не округлять вверх или вниз. Я действительно новичок в этом, и я читал о setprecision, но, очевидно, книга, которую я читаю, забыла упомянуть об этом. – Joseph

Смежные вопросы