How to round to 2 decimals with Python?
I am getting a lot of decimals in the output of this code (Fahrenheit to Celsius converter).
My code currently looks like this:
def main():
printC(formeln(typeHere()))
def typeHere():
global Fahrenheit
try:
Fahrenheit = int(raw_input("Hi! Enter Fahrenheit value, and get it in Celsius!\n"))
except ValueError:
print "\nYour insertion was not a digit!"
print "We've put your Fahrenheit value to 50!"
Fahrenheit = 50
return Fahrenheit
def formeln(c):
Celsius = (Fahrenheit - 32.00) * 5.00/9.00
return Celsius
def printC(answer):
answer = str(answer)
print "\nYour Celsius value is " + answer + " C.\n"
main()
So my question is, how do I make the program round every answer to the 2nd decimal place?
Solution 1:
You can use the round
function, which takes as its first argument the number and the second argument is the precision after the decimal point.
In your case, it would be:
answer = str(round(answer, 2))
Solution 2:
Using str.format()
's syntax to display answer
with two decimal places (without altering the underlying value of answer
):
def printC(answer):
print("\nYour Celsius value is {:0.2f}ºC.\n".format(answer))
Where:
-
:
introduces the format spec -
0
enables sign-aware zero-padding for numeric types -
.2
sets the precision to2
-
f
displays the number as a fixed-point number
Solution 3:
Most answers suggested round
or format
. round
sometimes rounds up, and in my case I needed the value of my variable to be rounded down and not just displayed as such.
round(2.357, 2) # -> 2.36
I found the answer here: How do I round a floating point number up to a certain decimal place?
import math
v = 2.357
print(math.ceil(v*100)/100) # -> 2.36
print(math.floor(v*100)/100) # -> 2.35
or:
from math import floor, ceil
def roundDown(n, d=8):
d = int('1' + ('0' * d))
return floor(n * d) / d
def roundUp(n, d=8):
d = int('1' + ('0' * d))
return ceil(n * d) / d