C++Qt5.9版本,代码实现:将精度为小数点后2位的QString类型转为保留精度的double型,但是使用todouble()会导致精度丢失。
时间: 2024-10-11 12:05:14 浏览: 29
C++各种数据类型相互转化笔记
在C++ Qt 5.9中,如果你有一个精确到小数点后两位的QString字符串,并希望将其转换成double类型而保持小数点后的精度,可以使用`QNumberFormat`类配合`toDouble()`函数。这是因为直接调用`toDouble()`可能会导致精度损失。下面是一个示例:
```cpp
#include <QCoreApplication>
#include <QNumberFormat>
#include <QString>
double stringToDoubleWithPrecision(QString str, int precision = 2) {
QNumberFormat format;
format.setMaximumFractionDigits(precision);
format.setGroupingEnabled(false); // 防止千分位分隔
// 将QString转换为double
double result = format.toDouble(str);
if (format.isOk()) {
return result;
} else {
qWarning("Failed to convert QString to double with specified precision");
return 0.0; // 返回默认值或处理错误的方式
}
}
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
QString str = "123.456";
double doubleValue = stringToDoubleWithPrecision(str);
std::cout << "Converted double value: " << doubleValue << std::endl;
return a.exec();
}
```
在这个例子中,`stringToDoubleWithPrecision`函数会先设置一个`QNumberFormat`,然后尝试将QString按照指定的精度转换成double。
阅读全文