2014-02-14 8 views
2

Я перегрузил оператора < <, чтобы распечатать данные о продукте в моей программе.установить точность перегруженного оператора <<

ostream& operator<< (ostream &out, const Product& p) { 
    return out << '\t' << (int)p.code << "\tR$ " << p.price << '\t' << p.name; 
} 

, но мне нужно изменить точность p.price до 2 десятичных цифр.

Я уже пробовал out.setprecision (2), но он не работал.

Это та часть, которая печатает продукт:

cout << this->items[i] << endl; 

и результат:

253 R$ 13 Paçoca

Мне нужно, чтобы это было R$ 13,00.

Любые идеи?

+1

Просто цепь его: '... << setprecision (2) << ...'! –

+1

'cout << std :: fixed << std :: setprecision (2) << p.price;' – jrok

+0

Если вы действительно имели в виду '253' (который является значением '(int) p.code'), следует также уходите, просто не выводите его. –

ответ

3

Я перегрузил оператора < <, чтобы распечатать данные о продукте в моей программе. ...

Вы можете просто вставить его в std::ostream& std::operator<<(std::ostream& out, ...) функции вызова цепи:

ostream& operator<< (ostream &out, const Product& p) { 
    return out << '\t' << (int)p.code << "\tR$ " 
       << std::fixed << std::setprecision(2) 
       << p.price << '\t' << p.name; 
} 

Может быть вам также необходимо адаптировать некоторые параметры локализации, чтобы получить , (вместо .) чтобы получить разделитель десятичной точки справа.

Я уже пытался out.setprecision (2), но didin't работать.

Причина заключается в том, что setprecision(int) не метод интерфейса std::ostream, но глобальная функция состоит из следующих битов (украдены из MinGW GCC 4.6.2 реализации):

struct _Setprecision { int _M_n; }; 

// This is what's actually called (both functions below): 
inline _Setprecision 
    setprecision(int __n) { return { __n }; } 

template<typename _CharT, typename _Traits> 
inline basic_ostream<_CharT, _Traits>& 
operator<<(basic_ostream<_CharT, _Traits>& __os, _Setprecision __f) 
{ 
    // Note you can alternatively call std::ostream::precision() function 
    __os.precision(__f._M_n); 
    return __os; 
} 
Смежные вопросы