【问题标题】: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)。