C++ QString转换成double,要求小数点后位数不变
时间: 2024-10-20 20:04:10 浏览: 44
在C++中,当你需要将`QString`类型的数值转换为精确的小数点后位数的`double`时,可以先确保字符串只包含有效的数字和小数点,然后再使用`QDoubleParser`来进行转换。以下是一个示例:
```cpp
#include <QCoreFoundation/QDoubleParser>
#include <QCoreApplication>
QString str = "-599.9664916992188"; // 假设这个字符串代表你要转换的数值
// 使用QDoubleParser检查并解析字符串
QDoubleParser parser(str);
if (!parser.isOk()) {
qDebug() << "Invalid string for conversion.";
return; // 如果字符串无效,不做转换
}
// 将解析后的值存储到double变量中
double doubleValue = parser.value();
QString precisionStr = parser.numberString().remove(QChar('.').toString()); // 获取去掉小数点后的完整部分
qDebug() << "Original string: " << str;
qDebug() << "Converted to double with original precision: " << doubleValue << ", as string: " << precisionStr;
// 确保小数点后位数不变
if (precisionStr.contains(".")) {
int precision = precisionStr.length() - precisionStr.indexOf('.') - 1; // 计算实际的小数位数
if (precision > 0) {
doubleValue = doubleValue * pow(10, precision);
}
}
```
注意,这种方法依赖于字符串的有效性以及小数点后的有效数字,如果字符串不符合预期格式,`QDoubleParser`可能无法准确解析。另外,对于极少数的特殊情况(如无穷大、NaN等),这种方法可能不会得到预期的结果。
阅读全文