How to convert QString to int?

前端 未结 7 1930
执念已碎
执念已碎 2021-02-01 12:10

I have a QString in my sources. So I need to convert it to integer without \"Kb\".

I tried Abcd.toInt() but it does not work

相关标签:
7条回答
  • 2021-02-01 12:30

    Don't forget to check if the conversion was successful!

    bool ok;
    auto str= tr("1337");
    str.toDouble(&ok); // returns 1337.0, ok set to true
    auto strr= tr("LEET");
    strr.toDouble(&ok); // returns 0.0, ok set to false
    
    0 讨论(0)
  • 2021-02-01 12:31

    On the comments:

    sscanf(Abcd, "%f %s", &f,&s);
    

    Gives an Error.

    This is the right way:

    sscanf(Abcd, "%f %s", &f,qPrintable(s));
    
    0 讨论(0)
  • 2021-02-01 12:33

    You don't have all digit characters in your string. So you have to split by space

    QString Abcd = "123.5 Kb";
    Abcd.split(" ")[0].toInt();    //convert the first part to Int
    Abcd.split(" ")[0].toDouble(); //convert the first part to double
    Abcd.split(" ")[0].toFloat();  //convert the first part to float
    

    Update: I am updating an old answer. That was a straight forward answer to the specific question, with a strict assumption. However as noted by @DomTomCat in comments and @Mikhail in answer, In general one should always check whether the operation is successful or not. So using a boolean flag is necessary.

    bool flag;
    double v = Abcd.split(" ")[0].toDouble(&flag); 
    if(flag){
      // use v
    }
    

    Also if you are taking that string as user input, then you should also be doubtful about whether the string is really splitable with space. If there is a possibility that the assumption may break then a regex verifier is more preferable. A regex like the following will extract the floating point value and the prefix character of 'b'. Then you can safely convert the captured strings to double.

    ([0-9]*\.?[0-9]+)\s+(\w[bB])
    

    You can have an utility function like the following

    QPair<double, QString> split_size_str(const QString& str){
        QRegExp regex("([0-9]*\\.?[0-9]+)\\s+(\\w[bB])");
        int pos = regex.indexIn(str);
        QStringList captures = regex.capturedTexts();
        if(captures.count() > 1){
            double value = captures[1].toDouble(); // should succeed as regex matched
            QString unit = captures[2]; // should succeed as regex matched
            return qMakePair(value, unit);
        }
        return qMakePair(0.0f, QString());
    }
    
    0 讨论(0)
  • 2021-02-01 12:33

    Use .toInt() for int .toFloat() for float and .toDouble() for double

    toInt();

    0 讨论(0)
  • 2021-02-01 12:46

    The string you have here contains a floating point number with a unit. I'd recommend splitting that string into a number and unit part with QString::split().

    Then use toDouble() to get a floating point number and round as you want.

    0 讨论(0)
  • 2021-02-01 12:49

    You can use:

    QString str = "10";
    int n = str.toInt();
    

    Output:

    n = 10
    
    0 讨论(0)
提交回复
热议问题