我有一个关于将十进制数格式化为特定 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);
这个问题有一些相似之处,但没有将前端和后端填充联系在一起。
对于如何解决这个问题有什么想法吗?感谢您的帮助!谢谢!
我认为你不能单独使用任何 QString 方法(number或arg)来做到这一点。当然,您可以手动添加零和符号,但我会使用旧的 sprintf:
double value = 1.5;
QString text;
text.sprintf("%+06.2f", value);
编辑:根据alexisdm的评论简化了代码。
编辑: 此方法已被删除。从 Qt 5.5 开始,替换为 QString::asprintf。
您只需手动添加标志即可:
QString("%1%2").arg(x < 0 ? '-' : '+').arg(qFabs(x),5,'f',2,'0');
编辑:最糟糕的是,实际上有一个内部函数
QLocalePrivate:doubleToString
同时支持强制符号和两端的填充,但它仅与QString::sprintf
中的这些选项一起使用,而不是:
QTextStream
及其 <<
运算符,可以强制显示标志,但不能显示宽度或QString::arg
,可以强制宽度,但不能强制符号。 但是对于
QTextStream
来说这可能是一个错误。