Because they are different numbers and different numbers have different rounding effects.
(Practically any of the Related questions down the right-hand side will explain the cause of the rounding effects themselves.)
Okay, more serious answer. It appears that numpy performs some transformation or calculation on the numbers in an array:
>>> t = numpy.array([0.22])
>>> t[0]
0.22
>>> t = numpy.array([0.24])
>>> t[0]
0.23999999999999999
whereas Python doesn't automatically do this:
>>> t = 0.22
>>> t
0.22
>>> t = 0.24
>>> t
0.24
The rounding error is less than numpy's "eps" value for float
, which implies that it should be treated as equal (and in fact, it is):
>>> abs(numpy.array([0.24])[0] - 0.24) < numpy.finfo(float).eps
True
>>> numpy.array([0.24])[0] == 0.24
True
But the reason that Python displays it as '0.24' and numpy doesn't is because Python's default float.__repr__
method uses lower precision (which, IIRC, was a pretty recent change):
>>> str(numpy.array([0.24])[0])
0.24
>>> '%0.17f' % 0.24
'0.23999999999999999'
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…