I want a
to be rounded to 13.95.
>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999
The round
function does not work the way I expected.
I want a
to be rounded to 13.95.
>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999
The round
function does not work the way I expected.
The method I use is that of string slicing. It's relatively quick and simple.
First, convert the float to a string, the choose the length you would like it to be.
In the single line above, we've converted the value to a string, then kept the string only to its first four digits or characters (inclusive).
Hope that helps!
You are running into the old problem with floating point numbers that all numbers cannot be represented. The command line is just showing you the full floating point form from memory.
In floating point your rounded version is the same number. Since computers are binary, they store floating point numbers as an integer and then divide it by a power of two so 13.95 will be represented in a similar fashion to 125650429603636838/(2**53).
Double precision numbers have 53 bits (16 digits) of precision and regular floats have 24 bits (8 digits) of precision. The floating point in Python uses double precision to store the values.
For example,
If you are after only two decimal places as in currency then you have a couple of better choices: 1) Use integers and store values in cents, not dollars and then divide by 100 to convert to dollars. 2) Or use a fixed point number like decimal.
The built-in
round()
works just fine in Python 2.7 or later.Example:
Check out the documentation.
You can modify the output format:
As @Matt pointed out, Python 3.6 provides f-strings, and they can also use nested parameters:
which will display
result: 2.35