0

I don't understand why is_integer method doesn't working

My Code here

from math import sqrt


def test(n):
    num = sqrt(n) * sqrt(2)
    print num, type(num), num.is_integer()


if __name__ == '__main__':
    test(8)
    t = 4.0
    print t, type(t), t.is_integer()

Console

4.0 <type 'float'> False
4.0 <type 'float'> True

sqrt(2) * sqrt(8) is not 4?

minji
  • 512
  • 4
  • 16
  • 1
    `float.is_integer()` is working just fine, but *printing* is not showing you all the digits (`str(floatvalue)` rounds to 12 digits for end-user presentation). Use `print repr(t)` to show what digits are omitted. – Martijn Pieters Nov 29 '16 at 09:58
  • `sqrt(2) * sqrt(8) is not 4?` No, it's `4.000000000000001` (or something else very. very close to 4 depending on your computer's hardware, – DeepSpace Nov 29 '16 at 10:00
  • `print "%.25f %.25f" % ( sqrt(8)*sqrt(2), sqrt(8*2) )` results in `4.0000000000000008881784197 4.0000000000000000000000000`. – Lutz Lehmann Nov 29 '16 at 10:51

0 Answers0