【问题标题】:Qt QString toInt() failsQt QString toInt() 失败
【发布时间】:2016-10-02 12:37:11
【问题描述】:

我有一个包含“-3.5”的“QString”,但是如果我尝试使用“toInt”方法将其转换为整数,它会返回 0。为什么?

    QString strTest = "-3.5";
    int intTest = strTest.toInt();

    qDebug() << intTest;

intTest 将是 0 吗?

【问题讨论】:

    标签: c++ qstring


    【解决方案1】:

    std::stoi 和标准库中的流不同,Qt 字符串要求整个字符串为有效整数才能执行转换。您可以改用 toDouble 作为解决方法。

    您还应该使用可选的ok 参数来检查错误:

    QString strTest = "-3.5";
    book ok;
    int intTest = strTest.toInt(&ok);
    if(ok) {
        qDebug() << intTest;
    } else {
        qDebug() << "failed to read the string";
    }
    

    【讨论】:

    • 但它是一个有效整数,有符号整数是-32767到32768。
    • 没有。这是一个有效的浮点/实数。整数具有离散值。
    • 好的,我可以看到,但我希望它会截断结果并返回 -3。
    • 这就是标准流和std::stoi 所做的。但显然不是 QString。
    【解决方案2】:

    如果你查看the documentation,它会说

    如果转换失败,则返回 0。

    你应该使用

    bool ok;
    strTest.toInt(&ok);
    

    然后检查 ok 的值 - 否则,您将无法确定 0 是实际值还是失败的指示。

    在这种情况下它失败了,因为它实际上不是一个整数(它有一个小数点)。请注意,您可以使用toDouble(也可以在那里检查ok!),然后根据您的需要转换结果。

    QString strTest = "-3.5";
    
    bool ok;
    double t = strTest.toDouble(&ok);
    
    if(ok)
        qDebug() << static_cast<int>(t);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      • 1970-01-01
      • 2021-11-16
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多