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

问题描述 投票:0回答:2

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

对于如何解决这个问题有什么想法吗?感谢您的帮助!谢谢!

c++ qt string-formatting qstring
2个回答
32
投票

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

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

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

编辑: 此方法已被删除。从 Qt 5.5 开始,替换为 QString::asprintf


14
投票

您只需手动添加标志即可:

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

编辑:最糟糕的是,实际上有一个内部函数

QLocalePrivate:doubleToString
同时支持强制符号和两端的填充,但它仅与
QString::sprintf
中的这些选项一起使用,而不是:

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

但是对于

QTextStream
来说这可能是一个错误。

© www.soinside.com 2019 - 2024. All rights reserved.