我有一个关于将十进制数格式化为某种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)
有关如何解决此问题的任何想法?非常感谢您的帮助!谢谢!
答案 0 :(得分:22)
我认为你不能单独使用任何QString方法(number或arg)。当然你可以手动添加零和符号,但我会使用好的旧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
可能是一个错误。