Можете ли вы установить точность и формат чисел с плавающей запятой 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