[英]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
更新 :我正在更新舊答案。 這是對具體問題的直接回答,並有嚴格的假設。 但正如@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());
}
您在此處的字符串包含帶有單位的浮點數。 我建議使用QString::split()
將該字符串拆分為數字和單位部分。
然后使用toDouble()
獲取浮點數並根據需要進行舍入。
不要忘記檢查轉換是否成功!
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()
浮法和.toDouble()
雙
作為建議,您還可以使用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 str = "10";
int n = str.toInt();
輸出:
n = 10
關於評論:
sscanf(Abcd, "%f %s", &f,&s);
給出錯誤。
這是正確的方法:
sscanf(Abcd, "%f %s", &f,qPrintable(s));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.