Is 0.0 the same as 0 in Python?

From a simple mathematical calculation, anybody can say that

0.001
1, but when we try to execute
0.001
1 in Python or Java, the output is not equal to 0. This is not an error with your code or issue with compiler. Then why the output !=0. OK, let’s take it slowly and go back a little bit, start with Floating point numbers.

Floating-point numbers are represented in computer hardware as base 2 (binary) fractions.

For example, the decimal fraction

0.125

has value 1/10 + 2/100 + 5/1000, and in the same way the binary fraction

0.001

has value 0/2 + 0/4 + 1/8. These two fractions have identical values, the only real difference being that the first is written in base 10 fractional notation, and the second in base 2.

Unfortunately, most decimal fractions cannot be represented exactly as binary fractions. A consequence is that, in general, the decimal floating-point numbers you enter are only approximated by the binary floating-point numbers actually stored in the machine.

For example, the decimal value 0.1 cannot be represented exactly as a base 2 fraction. In base 2, 1/10 is the infinitely repeating fraction

0.0001100110011001100110011001100110011001100110011...

Stop at any finite number of bits, and you get an approximation.

On a typical machine running Python, there are 53 bits of precision available for a Python float, so the value stored internally when you enter the decimal number

0.001
3 is the binary fraction

0.00011001100110011001100110011001100110011001100110011010

which is close to, but not exactly equal to, 1/10.

It’s easy to forget that the stored value is an approximation to the original decimal fraction, because of the way that floats are displayed at the interpreter prompt. Python only prints a decimal approximation to the true decimal value of the binary approximation stored by the machine. If Python were to print the true decimal value of the binary approximation stored for 0.1, it would have to display

>>> 0.1
0.1000000000000000055511151231257827021181583404541015625

That is more digits than most people find useful, so Python keeps the number of digits manageable by displaying a rounded value instead

>>> 0.1
0.1

It’s important to realize that this is, in a real sense, an illusion: the value in the machine is not exactly 1/10, you’re simply rounding the display of the true machine value. This fact becomes apparent as soon as you try to do arithmetic with these values

>>> 0.1 + 0.2
0.30000000000000004

Note that this is in the very nature of binary floating-point: this is not a bug in Python, and it is not a bug in your code either. You’ll see the same kind of thing in all languages that support your hardware’s floating-point arithmetic (although some languages may not display the difference by default, or in all output modes).

Other surprises follow from this one. For example, if you try to round the value 2.675 to two decimal places, you get this

>>> round(2.675, 2)
2.67

The documentation for the built-in

0.001
4 function says that it rounds to the nearest value, rounding ties away from zero. Since the decimal fraction
0.001
5is exactly halfway between
0.001
6 and
0.001
7, you might expect the result here to be (a binary approximation to)
0.001
7. It’s not, because when the decimal string
0.001
5 is converted to a binary floating-point number, it’s again replaced with a binary approximation, whose exact value is

2.67499999999999982236431605997495353221893310546875

Since this approximation is slightly closer to

0.001
6 than to
0.001
7, it’s rounded down.

If you’re in a situation where you care which way your decimal halfway-cases are rounded, you should consider using the

0.0001100110011001100110011001100110011001100110011...
2 module. Incidentally, the
0.0001100110011001100110011001100110011001100110011...
2 module also provides a nice way to “see” the exact value that’s stored in any particular Python float

>>> from decimal import Decimal
>>> Decimal(2.675)
Decimal('2.67499999999999982236431605997495353221893310546875')

Another consequence is that since 0.1 is not exactly 1/10, summing ten values of 0.1 may not yield exactly 1.0, either:

0.001
0

Binary floating-point arithmetic holds many surprises like this.

As that says near the end, “there are no easy answers.” Still, don’t be unduly wary of floating-point! The errors in Python float operations are inherited from the floating-point hardware, but you do need to keep in mind that it’s not decimal arithmetic, and that every float operation can suffer a new rounding error.

While pathological cases do exist, for most casual use of floating-point arithmetic you’ll see the result you expect in the end if you simply round the display of your final results to the number of decimal digits you expect.

So friends, be little careful while playing with floating point numbers.

Happy Coding :-)

Thanks for reading! If you liked this article, hit that clap button below 👏. It means a lot to me and it helps other people see the story.

What is the difference between 0 and 0.0 in Python?

Python returns the first character of a string when either of these are used as index values. 0 and -0 are the same.

What does 0.0 mean in Python?

If no value or blank parameter is passed, it will return the values 0.0 as the floating-point output. Python float values are represented as 64-bit double-precision values.

Why 0 is 0.0 is false in Python?

The duplicates are not exactly the same question, but what you are trying is similar to int(0) == float(0) , which is also True . print(bool(float(0.00))) comes out false which means float of 0.00 is false which is why 0.0==False returns True.

Is 0 an int Python?

Introduction to integersEdit An integer, commonly abbreviated to int, is a whole number (positive, negative, or zero). So 7 , 0 , -11 , 2 , and 5 are integers. 3.14159 , 0.0001 , 11.11111 , and even 2.0 are not integers, they are floats in Python.