如何将QString转换为int

How to convert QString to int?

本文关键字:int 转换 QString      更新时间:2023-10-16

我的源代码中有一个QString。所以我需要将其转换为整数,不带"Kb"。

我尝试了Abcd.toInt(),但它不工作。

QString Abcd = "123.5 Kb"

字符串中不包含所有数字字符。所以你必须用空格

分隔
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:我正在更新旧答案。这是对具体问题的直接回答,带有严格的假设。然而,正如@DomTomCat在评论和@Mikhail在回答中所指出的那样,一般来说,一个人应该经常检查手术是否成功。因此,使用布尔标志是必要的。

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

同样,如果您将该字符串作为用户输入,那么您也应该怀疑该字符串是否真的可以用空格拆分。如果假设有可能被打破,那么使用正则表达式验证器是更可取的。像下面这样的正则表达式将提取浮点值和'b'的前缀字符。然后可以安全地将捕获的字符串转换为double类型。

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

你可以有一个像下面这样的实用函数

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());
}

不要忘记检查转换是否成功!

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

这里的字符串包含一个带单位的浮点数。我建议用QString::split()将该字符串拆分为数字和单位部分。

然后使用toDouble()来获得一个浮点数,并根据需要进行四舍五入。

您可以使用:

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

n = 10

使用.toInt()为int, .toFloat()为float, .toDouble()为double

toInt ();

作为建议,您也可以使用QChar::digitValue()来获取数字的数值。例如:

for (int var = 0; var < myString.length(); ++var) {
    bool ok;
    if (myString.at(var).isDigit()){
        int digit = myString.at(var).digitValue();
        //DO SOMETHING HERE WITH THE DIGIT
    }
}

来源:将一个元素从QString转换为int

注释:

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

给出一个错误。

这是正确的方法:

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