所以我想创建一组浮点数,其中两个数字在给定一定的容差的情况下被认为是相等的。例如,如果我有一套
a = set([1, 2, 3])
如果我添加容差为 1e-4 的元素 1.00001,则结果集应为
{1, 2, 3}
而不是
{1, 1.00001, 2, 3}
我们可以使用 round 函数来检查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
或者如果你想要一个像"阈值"这样的intger,只需使用
print(float(int(v)))
# 1.0