19

我有一个关于将十进制数格式化为某种 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

关于如何解决这个问题的任何想法?感谢您的帮助!谢谢!

4

2 回答 2

29

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

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

编辑:根据 alexisdm 的评论简化了代码。

于 2011-08-29T20:24:43.500 回答
14

您只需手动添加标志:

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

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

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

但这QTextStream可能是一个错误。

于 2011-08-29T20:40:59.853 回答