【问题标题】:Format a Number to a specific QString format将数字格式化为特定的 QString 格式
【发布时间】:2011-11-06 06:46:50
【问题描述】:

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

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

【问题讨论】:

    标签: c++ qt string-formatting qstring


    【解决方案1】:

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

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

    编辑:根据 alexisdm 的注释简化了代码。

    【讨论】:

    • 显然也有QString::sprintf
    • 谢谢,我对答案做了一些修改。
    • 虽然可能很明显,但要指出的是,您可以创建一个临时匿名 QString 并内联使用此函数,例如QString().sprintf(...)。当将其替换为静态的、更直接的 QString::number(...) 函数时,这会很方便。
    • QString().sprintf(...) 遗憾地被弃用了。 doc.qt.io/qt-5/qstring-obsolete.html#sprintf
    【解决方案2】:

    您只需手动添加标志:

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

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

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

    但是对于QTextStream,这可能是一个错误。

    【讨论】:

    • 我想我比我自己的答案更喜欢这个。
    猜你喜欢
    • 1970-01-01
    • 2011-09-27
    • 2019-10-02
    • 1970-01-01
    • 2017-04-09
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    相关资源
    最近更新 更多