Bootstrap

Qt-关于QString转换为浮点值的精度丢失解决方法

关于QString转换为Float精度就是问题

前言

在实际编写上位机时候,需要通过界面填入电流值,精度为0.1,最后将用户输入的值乘上10,然后组帧发送,在使用过程中,遇到件怪事,输入21.4,转换后为213,输入21.3,也转换为213,输入其它值,又会正确,于是我纳闷了!!

示例如下:

当我输入以下代码,运行程序后,输入字符串:21.4,转换为浮点值后,再乘10,应为:214,但是打印出问:213

    QString strLineEdit = ui->lineEdit->text();
    quint16 num;
    num = quint16 (strLineEdit.toFloat()*10);
    qDebug()<<"======num is:"<<num;

在这里插入图片描述
于是,我就感觉很奇怪,当我输入:21.6时,就没有问题。
在这里插入图片描述

解决:

后面,想到转换为浮点值,肯定会有精度损失,在使用QString转float时,结果float会被增加或者较少精度,于是我添加了一个强制转换。解决了问题。

    //QString strLineEdit = ui->lineEdit->text(); 不使用

    //精确小数点后1位,如果有特殊要求,修改其后面数字即可
    QString strLineEdit = QString::number(ui->lineEdit->text().toFloat()*10,'f',1);

    quint16 num;
    num = quint16 (strLineEdit.toFloat());
    qDebug()<<"======num is:"<<num;

在这里插入图片描述

最后:

遇到问题很正常,慢慢就解决了。

;