ソースに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());
}
変換が成功したかどうかを確認することを忘れないでください!
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()
を使用して浮動小数点数を取得し、必要に応じて丸めます。
Intには.toInt()
を使用し、floatには.toFloat()
を、doubleには.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
}
}