The division works and returns adequate precision in result.
So your problem is just about visualization or exactly:
- string-representation of floating-point numbers
Formatting a decimal
You can use string-formatting for that.
For example in Python 3, use f-strings:
twoFractionDigits = f"{result:.2f}"
or print(f"{result:.2f}")
The trick does .2f
, a string formatting literal or format specifier that represents a floating-point number (f
) with two fractional digits after decimal-point (.2
).
See also:
Try on the Python-shell:
Python 3.6.9 (default, Dec 8 2021, 21:08:43)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> a=1.175 #value of a after some division
>>> result = math.floor(a*100)/100
>>> result
1.17
>>> print(result)
1.17
>>> a=25/5 #Now a is perfectly divisible
>>> result = math.floor(a*100)/100
>>> result
5.0
>>> print(result)
5.0
>>> print(f"{result:.2f}")
5.00
Formatting a decimal as percentage
Similar you can represent the ratio as percentage:
print(f"{result:.2f} %")
prints:
5.00 %
A formatting shortcut for percentage can be:
print(f"{25/100:.2%}")
Which converts the result of 25/100 == 0.25
to:
25.00%
Note: The formatting-literal .2%
automatically converts from ratio to percentage with 2 digits after the decimal-point and adds the percent-symbol.
Formatting a decimal with specific scale (rounded or truncated ?)
Now the part without rounding-off, just truncation.
As example we can use the repeating decimal, e.g. 1/6
which needs to be either rounded or truncated (cut-off) after a fixed number of fractional digits - the scale (in contrast to precision).
>>> print(f"{1/6:.2}")
0.17
>>> print(f"{1/6:.2%}")
16.67%
Note how the formatted string is not truncated (to 0.16
) but rounded (to 0.17
). Here the scale was specified inside formatting-literal as 2
(after the dot).
See also:
Formatting many decimals in fixed width (leading spaces)
Another example is to print multiple decimals, like in a column as right-aligned, so you can easily compare them.
Then use string-formatting literal 6.2f
to add leading spaces (here a fixed-width of 6):
>>> print(f"{result:6.2f}")
5.00
>>> print(f"{100/25*100:6.2f}")
400.00
>>> print(f"{25/100*100:6.2f}")
25.00
See also
All the formatting-literals demonstrated here can also be applied using
- old-style %-formatting (also known as "Modulo string formatting") which was inherited from
printf
method of C language. Benefit: This way is also compatible with Python before 3.6).
- new-style
.format
method on strings (introduced with Python 3)
See theherk's answer which demonstrates those alternatives.
Learn more about string-formatting in Python: