【发布时间】:2016-10-02 12:37:11
【问题描述】:
我有一个包含“-3.5”的“QString”,但是如果我尝试使用“toInt”方法将其转换为整数,它会返回 0。为什么?
QString strTest = "-3.5";
int intTest = strTest.toInt();
qDebug() << intTest;
intTest 将是 0 吗?
【问题讨论】:
我有一个包含“-3.5”的“QString”,但是如果我尝试使用“toInt”方法将其转换为整数,它会返回 0。为什么?
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";
}
【讨论】:
std::stoi 所做的。但显然不是 QString。
如果你查看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);
【讨论】: