将数字格式化为特定的QString格式

时间:2011-08-29 19:23:15

标签: c++ qt string-formatting 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);

这个问题有一些相似之处,但并没有将前端和后端填充连接在一起。

Convert an int to a QString with zero padding (leading zeroes)

有关如何解决此问题的任何想法?非常感谢您的帮助!谢谢!

2 个答案:

答案 0 :(得分:22)

我认为你不能单独使用任何QString方法(numberarg)。当然你可以手动添加零和符号,但我会使用好的旧sprintf:

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

修改:根据alexisdm的评论简化代码。

答案 1 :(得分:8)

您只需手动添加标志:

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

编辑:最糟糕的是,实际上有一个内部函数,QLocalePrivate:doubleToString同时支持强制符号和两端的填充,但它仅用于QString::sprintf中的这些选项,而不是:

  • QTextStream及其<<运算符,可强制显示符号,但不会显示宽度或
  • QString::arg,它可以强制宽度而不是符号。

QTextStream可能是一个错误。