I have two integer values a
and b
, but I need their ratio in floating point. I know that a < b
and I want to calculate a / b
, so if I use integer division I'll always get 0 with a remainder of a
.
How can I force c
to be a floating point number in Python in the following?
c = a / b
Add a dot (
.
) to indicate floating point numbersor
where a is dividend and b is the divisor. This function is handy when quotient after division of two integers is a float.
Just making any of the parameters for division in floating-point format also produces the output in floating-point.
Example:
or,
or,
or,
In Python 3.x, the single slash (
/
) always means true (non-truncating) division. (The//
operator is used for truncating division.) In Python 2.x (2.2 and above), you can get this same behavior by putting aat the top of your module.
What is really being asked here is:
"How do I force true division such that
a / b
will return a fraction?"Upgrade to Python 3
In Python 3, to get true division, you simply do
a / b
.Floor division, the classic division behavior for integers, is now
a // b
:However, you may be stuck using Python 2, or you may be writing code that must work in both 2 and 3.
If Using Python 2
In Python 2, it's not so simple. Some ways of dealing with classic Python 2 division are better and more robust than others.
Recommendation for Python 2
You can get Python 3 division behavior in any given module with the following import at the top:
which then applies Python 3 style division to the entire module. It also works in a python shell at any given point. In Python 2:
This is really the best solution as it ensures the code in your module is more forward compatible with Python 3.
Other Options for Python 2
If you don't want to apply this to the entire module, you're limited to a few workarounds. The most popular is to coerce one of the operands to a float. One robust solution is
a / (b * 1.0)
. In a fresh Python shell:Also robust is
truediv
from theoperator
moduleoperator.truediv(a, b)
, but this is likely slower because it's a function call:Not Recommended for Python 2
Commonly seen is
a / float(b)
. This will raise a TypeError if b is a complex number. Since division with complex numbers is defined, it makes sense to me to not have division fail when passed a complex number for the divisor.It doesn't make much sense to me to purposefully make your code more brittle.
You can also run Python with the
-Qnew
flag, but this has the downside of executing all modules with the new Python 3 behavior, and some of your modules may expect classic division, so I don't recommend this except for testing. But to demonstrate: