我在我的源代码中有一个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
更新:我正在更新一个旧的答案。那是对特定问题的简单回答,有一个严格的假设。然而,如@DomTomCat在评论中和@Mikhail在答案中指出的那样,一般来说,我们应该始终检查操作是否成功。因此使用布尔标志是必要的。
bool flag;
double v = Abcd.split(" ")[0].toDouble(&flag);
if(flag){
// use v
}
如果您将该字符串作为用户输入,请考虑该字符串是否确实可以使用空格分隔,同时应持怀疑态度。如果有可能假设会被打破,则更建议使用正则表达式验证器。像下面这样的正则表达式将提取浮点值和' b '前缀字符。然后,您可以安全地将捕获的字符串转换为双精度。
([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
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
}
}
sscanf(Abcd, "%f %s", &f,&s);
出现错误。
这是正确的方法:
sscanf(Abcd, "%f %s", &f,qPrintable(s));
sscanf("123.5 Kb", "%f %s", &f,&s);
- Grijesh Chauhan