2016-02-09 3 views
0

У меня есть это главный:как set.precision на нескольких переменных в одном соиЬ

Product newProduct; 
cout.setf(ios::fixed); 
cout.setf(ios::showpoint); 
cout.precision(2); 
newProduct.display(); 

в Product.cpp у меня есть:

cout << "$" << basePrice << " - " 
    << name << " - " << cout.precision(1) << weight << " lbs\n"; 

, но изменяя точность до (1) в .cpp также меняет basePrice на (1). Как изменить точность для разных переменных в одном и том же cout? есть ли способ? или я просто размещаю их в разных версиях cout? Будет ли это работать? Почему или почему нет?

Обновление Когда я пытаюсь выполнить второй cout, он добавляет номер 2 в конец моей переменной имени. Другими словами, я закончил первый cout после переменной name. Он работает, но добавляет номер 2 до конца.

ответ

3

Используйте std::setprecision манипулятор вместо:

cout << setprecision(2) << "$" << basePrice << " - " 
<< name << " - " << setprecision(1) << weight << " lbs\n"; 

Число 2 является возвращаемым значением функции cout.precision(), что текущее значение точности, который вставляется в поток и, таким образом выход.

Edit:

Ой, забыл добавить #include <iomanip>.

Edit 2:

Для полноты см this question мой, почему cout.precision() влияет на весь поток при вызове в середине.

+0

Работал! так в чем разница между этими двумя функциями? –

+0

'precision' - это функция-член' cout', а 'setprecision()' - так называемый объект манипулятора (хотя и функция). По-видимому, вы можете использовать последнее в потоке, в то время как первое нужно вызывать между вызовами 'operator <<'. Кроме того, последнее не возвращает значение, в отличие от первого. – iksemyonov

+2

'setprecision' определенно возвращает что-то; в противном случае возникла бы проблема с использованием оператора '<<'. То, что оно возвращает, является объектом внутреннего типа библиотеки, для которого существует перегрузка оператора '<<'. Эта конкретная перегрузка задает точность потока и затем возвращает поток. – rici

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