【问题标题】:Format QString with fixed number of digits使用固定位数格式化 QString
【发布时间】:2021-03-19 19:21:40
【问题描述】:

在使用sprintf() 时,当我想格式化具有固定位数的数字时,我必须使用"%.3f""%2d" 之类的格式字符串。现在 Qt 手册说,我必须使用 QStrings::arg()-function 而不是 sprintf()

QString("%1").arg(QString::number(1.3));

那么如何指定结果字符串中显示的位数?谢谢:-)

【问题讨论】:

标签: qt qt5 string-formatting qstring


【解决方案1】:

QString::arg

您可以使用QString::arg 指定格式,例如:

  • %.3f: QString("%1").arg(1.3, 0, 'f', 3): 其中第二个参数是字段宽度(结果字符串的最小宽度,这里是0),第三个是数字的格式,(本例中f 表示不使用科学记数法),第四是精度(小数点后 3 位)。
  • %2d:QString("%1").arg(42, 2).

注意:当使用QString::arg 时,您必须小心使用适当的数据类型。例如,如果要将数字 50 格式化为小数点后一位零,则必须使用 QString("%1").arg(50.0, 0, 'f', 1)。如果您改用QString("%1").arg(50, 0, 'f', 1)(注意 50 是整数),由于参数冲突,代码将无法编译。

这是在 Qt 中执行此操作的首选方式,特别是在格式化字符串必须本地化的情况下。主要原因之一是值的 占位符 有一个索引(%1%2...),允许它们在字符串中按任何顺序排列并保持它们的语义(你在某些语言中可能需要更改顺序).. 使用类似sprintf 的函数时,参数的顺序很重要。

QString::asprintf

尽管如此,尽管在新的 Qt 代码中不推荐使用,但您可以使用 sprintf 类似 QString::asprintf(请不要使用已弃用的 QString::sprintf)。例如,QString::asprintf("%.3f", 1.3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-06
    • 2015-03-28
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2011-10-15
    • 1970-01-01
    相关资源
    最近更新 更多