日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

在python中如何比较两个float类型的数据是否相等

發(fā)布時間:2025/3/20 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在python中如何比较两个float类型的数据是否相等 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

奇怪的現(xiàn)象
前幾天跟同事聊起來,在計算機內(nèi)部float比較是很坑爹的事情。比方說,0.1+0.2得到的結(jié)果竟然不是0.3?

>>> 0.1+0.2 0.30000000000000004

為什么會出現(xiàn)如此傻的結(jié)果呢?

這篇文章做了詳細的解釋,簡單的來說就是計算機里面的數(shù)字是由二進制保存的,在計算機內(nèi)部有些數(shù)字不能準確的保存,于是就保存一個最靠近的數(shù)字。

在十進制中也會存在這樣的問題,數(shù)字不能準確地表示像1/3這樣的數(shù)字,所以你必須舍入到0.33之類的東西 - 你不要指望0.33 + 0.33 + 0.33加起來就是1。

因此我們在比較兩個float是否相等時,不能僅僅依靠 == 來進行判斷,而是當(dāng)他們兩者的差小于一個我們可以容忍的小值時,就可以認為他們就是相等的。

Python中是如何解決的?

各種語言中都有類似的處理方式,python中是這樣處理的?
簡單粗暴的判斷方法

return abs(f1 - f2) <= allowed_error

python3.5之后,PEP485提案中已給出了解決方案。
使用math.isclose方法,傳入需要比較的兩個數(shù)和可以接受的精度差值即可。

PEP 485: A function for testing approximate equality PEP 485 adds the
math.isclose() and cmath.isclose() functions which tell whether two
values are approximately equal or “close” to each other. Whether or
not two values are considered close is determined according to given
absolute and relative tolerances. Relative tolerance is the maximum
allowed difference between isclose arguments, relative to the larger
absolute value:

math.isclose 使用方法

''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' >>> import math >>> a = 5.0 >>> b = 4.99998 >>> math.isclose(a, b, rel_tol=1e-5) True >>> math.isclose(a, b, rel_tol=1e-6) False It is also possible to compare two values using absolute tolerance,which must be a non-negative value:>>> import math >>> a = 5.0 >>> b = 4.99998 >>> math.isclose(a, b, abs_tol=0.00003) True >>> math.isclose(a, b, abs_tol=0.00001) False

總結(jié)

以上是生活随笔為你收集整理的在python中如何比较两个float类型的数据是否相等的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。