[英]Set of floating point numbers
因此,我想創建一組浮點數,其中在給定一定的公差的情況下,兩個數被視為相等。 例如,如果我有一套
a = set([1, 2, 3])
如果我添加公差為1e-4的元素1.00001,則結果集應為
{1, 2, 3}
並不是
{1, 1.00001, 2, 3}
我們可以使用舍入函數來檢查tolerance of 1e-4
a = set([1,2,3])
def add(number):
if(round(number,4) not in a):
a.add(number)
add(1)
print(a)
add(1.0000)
print(a)
add(1.0001)
print(a)
add(1.1)
print(a)
在我看來,您應該只能夠檢查該集中的每個項目,並且,如果該項目與您要添加的項目之間的絕對差值小於閾值,則不要添加它。
這樣的事情應該可以解決問題:
def AddToSetWithThreshold(pSet, pValue, pThreshold):
vList = [entry for entry in pSet if abs(pValue - entry) < pThreshold]
if len(vList) == 0:
pSet.add(pValue)
a = set([1, 2, 3]) ; print(a)
AddToSetWithThreshold(a, 1.00001, 1e-4) ; print(a)
AddToSetWithThreshold(a, 1.00001, 1e-6) ; print(a)
因為第一個加法太接近於1
,第二個加法太接近了,這將導致以下輸出:
set([1, 2, 3])
set([1, 2, 3])
set([1, 2, 3, 1.00001])
導入數學並使用ceil
import math
decimals = 3
v = 1.234566789
print(math.ceil(v*pow(10,decimals))/pow(10,decimals))
# 1.234
或者,如果您想使用“閾值”之類的整數,請使用
print(float(int(v)))
# 1.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.