2016-10-02 822 views
3

我有一个'QString'包含“-3.5”,但是如果我尝试使用'toInt'方法将其转换为整数,它返回0.为什么?Qt QString toInt()失败

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

    qDebug() << intTest; 

intTest会是0吗?

回答

3

std::stoi和来自标准库的流不同,Qt字符串要求整个字符串是执行转换的有效整数。您可以使用toDouble作为解决方法。

你也应该使用可选的ok参数来检查错误:

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

但它是一个有效整数,有符号整数是-32767到32768. – SPlatten

+0

不是。它是一个有效的浮点数/实数。整数具有离散值。 – krzaq

+0

好吧,我可以看到,但我会期望它截断结果并返回-3。 – SPlatten

4

如果你看一下the documentation,它说

返回0,如果转换失败。

您应该使用

bool ok; 
strTest.toInt(&ok); 

,然后检查ok值 - 否则,你不会知道,如果0是实际值,或失败的指示。

在这种情况下,它是失败的,因为它实际上不是一个整数(它有一个小数点)。请注意,您可以使用toDouble(并在此处检查ok!),然后根据您认为合适的方式投射结果。

QString strTest = "-3.5"; 

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

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