2016-10-02 1 views
3

Ich habe eine 'QString' mit "-3.5", aber wenn ich versuche, dies zu einer ganzen Zahl mit der 'toInt' Methode zu konvertieren, gibt es 0. Warum?Qt QString toInt() schlägt fehl

QString strTest = "-3.5"; 
    int intTest = strTest.toInt(); 

    qDebug() << intTest; 

int Test wird 0?

Antwort

3

Im Gegensatz zu std::stoi und Streams aus der Standardbibliothek erfordern Qt-Strings, dass die gesamte Zeichenfolge eine gültige Ganzzahl für die Konvertierung ist. Sie könnten stattdessen toDouble als Workaround verwenden.

Sie sollten auch die optionalen ok Parameter auf Fehler überprüfen verwenden:

QString strTest = "-3.5"; 
book ok; 
int intTest = strTest.toInt(&ok); 
if(ok) { 
    qDebug() << intTest; 
} else { 
    qDebug() << "failed to read the string"; 
} 
+0

Aber es ist eine gültige ganze Zahl, eine signierte ganze Zahl ist -32767 bis 32768. – SPlatten

+0

Nein, es ist ein gültiger Gleitkomma/reelle Zahl. Eine ganze Zahl hat einen diskreten Wert. – krzaq

+0

ok, das kann ich sehen, aber ich hätte erwartet, dass das Ergebnis abgeschnitten und -3 zurückgegeben wird. – SPlatten

4

Wenn Sie the documentation aussehen, heißt es

0 zurück, wenn die Konvertierung fehlschlägt.

sollten Sie

bool ok; 
strTest.toInt(&ok); 

verwenden und dann den Wert von ok überprüfen - andernfalls werden Sie sich nicht sicher sein, wenn die 0 der Ist-Wert oder ein Anzeichen des Scheiterns.

In diesem Fall schlägt es fehl, weil es nicht tatsächlich eine ganze Zahl ist (es hat einen Dezimalpunkt). Beachten Sie, dass Sie toDouble verwenden können (und dort auch ok überprüfen können), und das Ergebnis dann wie gewünscht darstellen.

QString strTest = "-3.5"; 

bool ok; 
double t = strTest.toDouble(&ok); 

if(ok) 
    qDebug() << static_cast<int>(t);