浮点数集



所以我想创建一组浮点数,其中两个数字在给定一定的容差的情况下被认为是相等的。例如,如果我有一套

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

相关内容

  • 没有找到相关文章