如何将QString转换为int
How to convert QString to int?
我的源代码中有一个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));
相关文章:
- 是否可以从int转换为enum类类型
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 将字符串中的 int 转换为字母;
- 主.cpp:18:20:错误:从"int*"转换为"int"会失去精度 [-fa
- 将非常大的 int 转换为双倍,在某些计算机上会损失精度
- 如何将矢量<int>转换为字符数组?
- C++ 无法从 const int* 转换为 const_iterator
- 我不断收到错误 C2440'=':无法从"int *(__cdecl *)(int *,int *,int,int)"转换为"int *
- 如何将 int[4] 转换为 std::array<int,4>?
- 如何将data[i].int转换为vaible
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- 将私有矩阵形式 int 转换为双 C++
- 无法将参数 1 从 'int' 转换为 'int &'
- 将 int 转换为字符串后始终得到 0
- isspace 函数的性能警告,从 int 转换为布尔值
- 将大 int 转换为浮点数,而不舍入 c++
- 错误:无法将'uint8* {aka unsigned int*}'转换为"常量emxArray_uint8_T*"?
- 将未签名的INT转换为BCD
- 在 C++ 中将 int 转换为双精度