Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python calculated 1.0 of type float converts to zero using int() [duplicate]

Tags:

python

I am new to python, so I expect that I am missing some basic knowledge of types here. I am trying to create a string where I take a floating point number and replace decimal point with a string. In doing so I tried calling a line of code that is equivalent to:

int(pow(10, 1)*(5.1%1)))

But if you run this code:

x = pow(10, 1)*(5.1%1)
print(x)
print(type(x))
print(int(x))
print(int(1.0))
print(type(1.0))

It returns:

1.0
<type 'float'>
0
1
<type 'float'>

I assumed there is a type problem here but they are both type float. So why does int(x) return zero but not int(1.0)?

like image 786
ldoiron17 Avatar asked Apr 21 '26 09:04

ldoiron17


1 Answers

Due to rounding error, you didn't get exactly 1, but a bit less

>>> x = pow(10, 1)*(5.1%1)
>>> print '{:.20f}'.format(x)
0.99999999999999644729

You are just getting a bunch of other things rounding up for you when you display it

>>> x = pow(10, 1)*(5.1%1)
>>> print x
1.0
>>> print '{:.10f}'.format(x)
1.0000000000

To get something displayed that will definitely give the same number (slightly better for debugging), use repr out of habit

>>> x = pow(10, 1)*(5.1%1)
>>> print repr(x)
0.9999999999999964
>>> print 'hello {!r} world'.format(x)
hello 0.9999999999999964 world
like image 131
Mike Graham Avatar answered Apr 22 '26 22:04

Mike Graham



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!