首页 > 解决方案 > 使用固定位数格式化 QString

问题描述

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

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

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

标签: qtqt5string-formattingqstring

解决方案


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-like 函数参数的顺序很重要。

QString::asprintf

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


推荐阅读