I have a QString
in my sources. So I need to convert it to integer without "Kb".
I tried Abcd.toInt()
but it does not work.
QString Abcd = "123.5 Kb"
You can use: QString qs; // do things std::cout << qs. toStdString() << std::endl; It internally uses QString::toUtf8() function to create std::string, so it's Unicode safe as well.
QString date_string_on_db = "20/12/2015"; QDate Date; Date. fromString(date_string_on_db,"dd/MM/YYYY");
One effective way to convert a string object into a numeral int is to use the stoi() function. This method is commonly used for newer versions of C++, with is being introduced with C++11. It takes as input a string value and returns as output the integer version of it.
You don't have all digit characters in your string. So you have to split by space
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: I am updating an old answer. That was a straight forward answer to the specific question, with a strict assumption. However as noted by @DomTomCat in comments and @Mikhail in answer, In general one should always check whether the operation is successful or not. So using a boolean flag is necessary.
bool flag; double v = Abcd.split(" ")[0].toDouble(&flag); if(flag){ // use v }
Also if you are taking that string as user input, then you should also be doubtful about whether the string is really splitable with space. If there is a possibility that the assumption may break then a regex verifier is more preferable. A regex like the following will extract the floating point value and the prefix character of 'b'. Then you can safely convert the captured strings to double.
([0-9]*\.?[0-9]+)\s+(\w[bB])
You can have an utility function like the following
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()); }
The string you have here contains a floating point number with a unit. I'd recommend splitting that string into a number and unit part with QString::split()
.
Then use toDouble()
to get a floating point number and round as you want.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With