求qt如何解决小数计算过程中的精度丢失
生活随笔
收集整理的這篇文章主要介紹了
求qt如何解决小数计算过程中的精度丢失
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題描述
在下面的例子中,變量a減去一個常量,本該值為0.90,但是通過程序得到a的值0.8999999999,例子如下:
qreal a = 0.95; a = a - 0.05;不光是做減法的時候會出現這樣的問題,還有做乘法的時候也會出現這樣的問題,例子如下:
qreal a = 1.15; int b = a * 100;本該a乘以100 后得到的b的值應該為115,然后程序得到的是114。
原因
網上找到的答案是計算機內部需要將小數后的位數轉換為二進制,在這個過程中存在精度的丟失。(大體是這樣,時間原因未深究)
解決方法
初步采用字符串轉換的方式,但似乎并沒有完全解決。
//將m_scale四舍五入取2位QString str = QString::asprintf("%.2f",a);a = str.toDouble();在采用字符串這樣轉換的情況下,只是解決了上述相減導致的值不正確的現象。求相乘時如何解決精度丟失。
對于上述兩個現象,希望得到正確的數值,望大牛不吝賜教。
后續已經跟進解決,上面對于qreal類型變量與100相乘得到整數,故而無法將最后的正確數值得到,究其原因是因為定義的變量不應該是int型的變量來接收兩者相乘的數值,而應該定義未qreal類型。下面上代碼:
原來的寫法是:
改進之后的寫法:
qreal ratio = m_scale * 100;//將m_scale四舍五入取2位解決精度丟失2021-3-18QString str = QString::asprintf("%.2f",ratio);ratio = str.toDouble();按照上述的方式可以解決精度丟失問題。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的求qt如何解决小数计算过程中的精度丢失的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java gc堆中的分区_jvm内存各个
- 下一篇: 双向循环链表c语言,双向循环链表的实现与