我有一个'QString'包含“-3.5”,但是如果我尝试使用'toInt'方法将其转换为整数,它返回0.为什么?Qt QString toInt()失败
QString strTest = "-3.5";
int intTest = strTest.toInt();
qDebug() << intTest;
intTest会是0吗?
我有一个'QString'包含“-3.5”,但是如果我尝试使用'toInt'方法将其转换为整数,它返回0.为什么?Qt QString toInt()失败
QString strTest = "-3.5";
int intTest = strTest.toInt();
qDebug() << intTest;
intTest会是0吗?
与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";
}
如果你看一下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);
但它是一个有效整数,有符号整数是-32767到32768. – SPlatten
不是。它是一个有效的浮点数/实数。整数具有离散值。 – krzaq
好吧,我可以看到,但我会期望它截断结果并返回-3。 – SPlatten