Форматирование числа в определенный формат QString - PullRequest
11 голосов
/ 29 августа 2011

У меня есть вопрос о форматировании десятичного числа в определенный формат 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 ]

24 голосов
/ 30 августа 2011

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

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

Редактировать: Упрощенный код в соответствии с комментарием alexisdm.

8 голосов
/ 30 августа 2011

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

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

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

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

Но для QTextStream это может быть ошибкой.

...