按特定数字进行浮点精度比较

2024-05-29 11:10:44 发布

您现在位置:Python中文网/ 问答频道 /正文

如何测试两个浮点数在指定数字之前是否相同

我试过了

aa1 = 0.043403
aa2 = 0.043392
print(int(aa1*1000) == int(aa2*1000))
>> True

我想这样做,但我的数据包含NAN值,它无论如何都无法将其转换为intro。 我也试过数学,但很难

例如,我想保留到3位数,然后应用math.isclose

aa3 = 0.013041
aa4 = 0.012545
aa6 = 0.012945

print(math.isclose(aa3, aa4, abs_tol = 0.0001))
>>Flase
print(math.isclose(aa3, aa5, abs_tol = 0.0001))
>>True

但我想在这两种情况下都是假的

有什么简单的想法吗


Tags: 数据true数字mathabsnanintprint
3条回答

创建一个函数,该函数包含两个数字:ab,并且具有预设的阈值。如果ab之间的差值小于treshold,则返回True

def isSame(a, b):
    return abs(a - b) < treshold

其中treshold可以是浮点。0.0001将在第三位数字后忽略。或者在3位数字后将数字剪切为字符串,并将其转换回float

编辑、截断方法:

def isSame(a, b, digit):
    return float(str(a)[0:digit+2]) == float(str(b)[0:digit+2])

我们忽略第三位之后的每个数字,以防您的digit = 3

rel_tol应该足够了:

import math

def check(a, b):
    print(math.isclose(a, b, rel_tol=0.001), abs(a/b - 1.) < 0.001)

check(aa1, aa2)
check(aa3, aa4)
check(aa3, aa6)

给出预期的

True True
False False
False False

注意:第二次计算不处理两个相等的零:易于添加。不确定底流是否会影响它

您可以使用AssertalPosteQual轻松完成此任务 下面是代码

import unittest

unittest.TestCase.assertAlmostEqual(value1,valu2,decimalUpto)

在你的情况下,它可以是

unittest.TestCase.assertAlmostEqual(aa1 ,aa2 ,3)

祝你好运

相关问题 更多 >

    热门问题