Форматирование числа в определенный формат QString

У меня вопрос о форматировании десятичного числа в определенный формат QString. В принципе, у меня есть поле ввода, в моей программе, которая может принимать любые значения. Я хочу, чтобы он перевел значение в этом поле в формат "+05.30" (на основе значения). Значение будет ограничено + / -99.99.

некоторые примеры включают:

.2 --> +00.02

-1.5 --> -01.50

9.9 --> +09.90

Я думаю использовать такой конвертер, но у него будут некоторые очевидные проблемы (нет ведущего 0, нет ведущего + знака).

QString temp = QString::number(ui.m_txtPreX1->text().toDouble(), 'f', 2);

этот вопрос имел некоторые сходства, но не связывает как переднюю, так и заднюю обивку.

преобразовать int в QString с нулевым заполнением (ведущие нули)

есть идеи, как подойти к этой проблеме? Ваша помощь приветствуется! Спасибо!

2 ответов


Я не думаю, что вы можете сделать это с любым методом в QString (либо или arg). Конечно, вы можете добавить нули и знаки вручную, но я бы использовал старый добрый sprintf:

double value = 1.5;
QString text;
text.sprintf("%+06.2f", value);

Edit: упрощенный код в соответствии с комментарием alexisdm.


вам просто нужно добавить знак вручную:

QString("%1%2").arg(x < 0 ? '-' : '+').arg(qFabs(x),5,'f',2,'0'); 

редактировать: хуже всего то, что на самом деле существует внутренняя функция, QLocalePrivate:doubleToString который поддерживает принудительный знак и заполнение на обоих концах одновременно, но он используется только с этими параметрами в QString::sprintf, а не

  • QTextStream и << оператор, который может заставить знак показывать, но не ширину или
  • QString::arg, которое может принудить ширину но не знаком.

но QTextStream что может быть ошибка.