关于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;
最后:
遇到问题很正常,慢慢就解决了。