this is my code:
print str(float(1/3))+'%'
and it shows:
0.0%
but I want to get 33%
What can I do?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
format supports a percentage floating point precision type:
>>> print "{0:.0%}".format(1./3)
33%
If you don’t want integer division, you can import Python3’s division from __future__:
>>> from __future__ import division
>>> 1 / 3
0.3333333333333333
# The above 33% example would could now be written without the explicit
# float conversion:
>>> print "{0:.0f}%".format(1/3 * 100)
33%
# Or even shorter using the format mini language:
>>> print "{:.0%}".format(1/3)
33%
Method 2
There is a way more convenient ‘percent’-formatting option for the .format() format method:
>>> '{:.1%}'.format(1/3.0)
'33.3%'
Method 3
Just for the sake of completeness, since I noticed no one suggested this simple approach:
>>> print("%.0f%%" % (100 * 1.0/3))
33%
Details:
%.0fstands for “print a float with 0 decimal places“, so%.2fwould print33.33%%prints a literal%. A bit cleaner than your original+'%'1.0instead of1takes care of coercing the division to float, so no more0.0
Method 4
Just to add Python 3 f-string solution
prob = 1.0/3.0
print(f"{prob:.0%}")
Method 5
You are dividing integers then converting to float. Divide by floats instead.
As a bonus, use the awesome string formatting methods described here: http://docs.python.org/library/string.html#format-specification-mini-language
To specify a percent conversion and precision.
>>> float(1) / float(3)
[Out] 0.33333333333333331
>>> 1.0/3.0
[Out] 0.33333333333333331
>>> '{0:.0%}'.format(1.0/3.0) # use string formatting to specify precision
[Out] '33%'
>>> '{percent:.2%}'.format(percent=1.0/3.0)
[Out] '33.33%'
A great gem!
Method 6
Then you’d want to do this instead:
print str(int(1.0/3.0*100))+'%'
The .0 denotes them as floats and int() rounds them to integers afterwards again.
Method 7
I use this
ratio = round(1/3, 2)
print(f"{ratio} %")
output: 0.33 %
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0