1

私は次の問題を扱っていますunittest2

assertAlmostEqual(69.88, 69.875, places=2)  # returns True

しかし

assertAlmostEqual(1.28, 1.275, places=2)  # returns False

assertAlmostEqual問題はメソッドにあると思います:

def assertAlmostEqual(self, first, second, places=None, ...):
    if first == second:
        # shortcut
        return
    ...
    if delta is not None:
    ...
    else:
        if places is None:
            places = 7

        if round(abs(second-first), places) == 0:
            return

    ...
    raise self.failureException(msg)

代わりに次のようにする必要があります。

if abs(round(second, places) - round(first, places)) == 0
    return
4

2 に答える 2

0

2 番目の例の違いは、

0.005

また、浮動小数点の偏りが言及されていなくても、ラウンドの結果は0.01になるため、これらの数値は2桁の精度で実際に異なります

このメソッドは、数値の違いを比較します。実際に浮動小数点数を比較するのは一種の標準です

したがって、問題は実装にあるのではなく、一般的な float 比較とは異なる期待に基づいています。

于 2015-02-24T13:21:47.260 に答える