如何将 QString 转换为 int?

我有 QString的资料。 所以我需要把它转换成整数 没有“ Kb”。

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

QString Abcd = "123.5 Kb"
260467 次浏览

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

然后使用 toDouble()得到一个浮点数,并按照您的需要进行调整。

字符串中没有所有的数字字符,所以必须按空格分割

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

更新 : 我正在更新一个旧的答案。这是对具体问题的直截了当的回答,带有严格的假设。然而,正如@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());
}

评论:

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

给出一个错误。

这是正确的做法:

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

作为一个建议,你也可以使用 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

别忘了检查转换是否成功!

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

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

到 Int () ;

你可使用:

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

产出:

n = 10