因此,我想创建一组浮点数,其中在给定一定的公差的情况下,两个数被视为相等。例如,如果我有一套
GameState gs;
void initialize_mines() {
for (int i =0; i < NUM_TILES_X; i++) {
for (int j =0; j < NUM_TILES_Y; j++) {
gs.tiles[i][j].revealed = false;
}
}
}
如果我添加公差为1e-4的元素1.00001,则结果集应为
a = set([1, 2, 3])
而不是
{1, 2, 3}
答案 0 :(得分:5)
我们可以使用取整功能来检查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)
答案 1 :(得分:4)
在我看来,您应该只能够检查该集中的每个项目,并且,如果该项目与您要添加的项目之间的绝对差小于阈值,请不要添加它
类似这样的事情应该可以解决:
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])
答案 2 :(得分:0)
导入数学并使用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