【问题标题】:Convert a double to a QString将 double 转换为 QString
【发布时间】:2011-08-21 21:38:42
【问题描述】:

我正在用 QT 编写程序。我想在 C++ 中将 double 转换为 Qstring

【问题讨论】:

  • @Macmade,我是 QT 和 CPP 的新手。但我有一个 java 代码,所以我想转换成 cpp 用于 qt 应用程序。

标签: c++ qt


【解决方案1】:

查看documentation

引用:

QString 提供了很多函数 将数字转换为字符串和 串成数字。见arg() 函数,setNum() 函数, number() 静态函数,以及 toInt()toDouble() 和类似的 功能。

【讨论】:

    【解决方案2】:

    使用QString的数字方法(文档为here):

    double valueAsDouble = 1.2;
    QString valueAsString = QString::number(valueAsDouble);
    

    【讨论】:

    • 这个很烦人,因为精度是固定的。
    • 注意:该调用可能会导致精度损失。例如,我打了一次同样的电话,我从 6844418.0 得到了 6.84442e+06。它们是公制 UTM 坐标,因此 10m 的损失是不可接受的。请根据应用程序小心。我用std::stringstream ss; ss << std::setprecision( 12 ); ss << (double)value; 我如何在这个东西中标记代码块?
    • @PauloCarvalho 使用 QLocale::FloatingPointShortest(自 Qt 5.7 起可用)
    • 注意:对于 'g' 和 'G' 格式,精度表示有效数字的最大数量(省略尾随零)。例如 1.0 将被转换为“1”
    【解决方案3】:

    我会使用QLocale::toString() 而不是QString::number(),这样我就可以获得语言环境感知组分隔符,例如德语“1.234.567,89”。

    【讨论】:

    • 并非总是如此。我需要转换为美国系统(48.1),这会搞砸。
    【解决方案4】:

    可以使用arg(),如下:

    double dbl = 0.25874601;
    QString str = QString("%1").arg(dbl);
    

    这克服了其他函数的“固定精度”问题,例如:setNum() 和 number(),它们将生成随机数来完成定义的精度

    【讨论】:

    • 根据文档The conversion uses the default locale,默认情况下精度也是-1,而不是QString::number的6
    【解决方案5】:

    基于@Kristian 的回答,我希望显示固定的小数位数。这可以通过QString::number(...) 函数中的其他参数来实现。例如,我想要 3 个小数位:

    double value = 34.0495834;
    QString strValue = QString::number(value, 'f', 3);
    // strValue == "34.050"
    

    'f' 指定十进制格式表示法(更多信息here,您也可以指定科学计数法),3 指定精度(小数位数)。可能已经在其他答案中链接,但可以找到有关QString::number 函数的更多信息here in the QString documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-30
      • 2019-12-23
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多