Можете ли вы установить точность и формат чисел с плавающей запятой qDebug() глобально?
Я хочу использовать qDebug (), qInfo () и так далее с пользовательской точностью с плавающей запятой по умолчанию и числовым форматом.
есть ли способ определить это глобально?
представьте себе, это:
double num = 1.2;
qDebug() << "My floating point Number is: " << QString::number(num, 'f', 2);
//Output: My floating point Number is 1.20
теперь я хотел бы избежать QString:: number(num, 'f', 2) каждый раз, когда я пишу число, и хотел бы использовать стандартный перцизион и формат.
2 ответов
вы не можете.
qDebug()
, qFatal()
, etc... возврат экземпляров класса QDebug
.
Проблема в том, что оператор QDebug::operator<<(float f)
- это не виртуальная функция-член класса.
Вы не можете определить другой без получения сообщения об ошибке компиляции
оператор
форматирование QDebug
поток можно регулировать через QTextStream
манипуляторы. Поэтому вы должны позвонить
qDebug() << fixed << qSetRealNumberPrecision(2);
в начале вашей программы.
обратите внимание, однако, что состояние форматирования qDebug()
может измениться позже, если некоторый (не очень тщательно написанный) код устанавливает требуемое форматирование и не восстанавливает его в предыдущее состояние после завершения его работа.
редактировать
оказывается, что эффект QTextStream
манипуляторы (по крайней мере в сочетании с qDebug()
) ограничивается содержащим оператором и не сохраняется. Итак, лучшее, что вы можете сделать, это определить свою замену qDebug()
следующим образом:
#define myqDebug() qDebug() << fixed << qSetRealNumberPrecision(2)
и используйте его вместо qDebug()
:
double num = 1.2;
myqDebug() << "My floating point Number is: " << num << endl;
выход:
My floating point Number is: 1.20