【问题标题】:QString:number with maximum 2 decimal places without trailing zeroQString:最多有 2 位小数的数字,后面不带零
【发布时间】:2014-09-13 00:06:30
【问题描述】:

我有一个这样的部门:

number / 1000.0

有时它会给出像 96.0000000001 这样的答案,有时除法会按预期工作。

我想将我的号码限制为最多两位小数,并且没有尾随零。

如果是 96.5500000001,它应该显示 96.55

如果是 96.4000000001,它应该显示 96.4

这种方式可以格式化字符串吗?

我已经检查了文档,它提供了“f”参数来指定小数位数,但这样尾随零仍然存在。 这是我尝试过的:

QString::number(number / 1000.0, 'f', 2)

但这给了我 96.4000000001 --> 96.40 而不是 96.4

有什么解决办法吗?这种方式怎么格式化?

【问题讨论】:

    标签: c++ qt precision qstring qtcore


    【解决方案1】:

    这总是以固定(非科学)表示法返回格式化数字,并且相当有效:

    QString variableFormat(qreal n) { // assumes max precision of 2
        int i = rint(n * 100.0);
        if (i % 100)
            return QString::number(n, 'f', i % 10 ? 2 : 1);
        else
            return QString::number(i / 100);
    }
    

    【讨论】:

      【解决方案2】:

      documentation 非常清楚你应该做什么:

      参数格式也指定了精度。对于“e”、“E”和“f”格式,精度表示小数点后的位数。对于“g”和“G”格式,精度表示有效数字的最大数量(省略尾随零)。

      因此,请使用“g”或“G”格式。

      main.cpp

      #include <QString>
      #include <QDebug>
      
      int main()
      {
          qDebug() << QString::number(96400.0000001 / 1000.0, 'g', 5);
          qDebug() << QString::number(96550.0000001 / 1000.0, 'G', 5);
          return 0;
      }
      

      main.pro

      TEMPLATE = app
      TARGET = main
      QT = core
      SOURCES += main.cpp
      

      构建并运行

      qmake && make && ./main
      

      输出

      "96.4"
      "96.55"
      

      【讨论】:

      • 在您的示例中,如果我执行 QString::number(1234.000001 / 1000.0, 'g', 5) 它将返回 1.234,这是三位小数。
      • 当然,所以:1)将所有内容截断为最多两位数 - 就像你的问题已经除了 toDouble() 调用一样 - 然后运行我的解决方案,你会或多或少地得到你想要的角落案例。遗憾的是,您仍然可以使用简洁的格式。如果这让您感到困扰,请再次调用 toDouble() 并使用另一种格式和现在截断的数字。 :)
      • 感谢您承认剩余的问题,但直到该问题解决后才解决。这个答案的问题在于g 选项可以为您的许多值留下科学记数法,具体取决于您的值。如果要强制使用可变小数的固定表示法,则需要进行不同的数学运算并使用具有可变精度值的 f 选项。如果是 N.00,您还需要转换为 int 我刚刚在新答案中发布了完整的解决方案。
      猜你喜欢
      • 1970-01-01
      • 2016-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多