Quieres redondear tu respuesta.
round(value,significantDigit)es la solución ordinaria para hacer esto, sin embargo, esto a veces no funciona como cabría esperar desde una perspectiva matemática cuando el dígito inmediatamente inferior (a la izquierda de) el dígito que está redondeando tiene un 5.
Aquí hay algunos ejemplos de este comportamiento impredecible:
>>> round(1.0005,3)
1.0
>>> round(2.0005,3)
2.001
>>> round(3.0005,3)
3.001
>>> round(4.0005,3)
4.0
>>> round(1.005,2)
1.0
>>> round(5.005,2)
5.0
>>> round(6.005,2)
6.0
>>> round(7.005,2)
7.0
>>> round(3.005,2)
3.0
>>> round(8.005,2)
8.01
Suponiendo que su intención es hacer el redondeo tradicional para las estadísticas en las ciencias, este es un útil contenedor para que la roundfunción funcione como se espera y necesita importcosas adicionales como Decimal.
>>> round(0.075,2)
0.07
>>> round(0.075+10**(-2*6),2)
0.08
¡Ajá! Entonces, en base a esto, podemos hacer una función ...
def roundTraditional(val,digits):
return round(val+10**(-len(str(val))-1), digits)
Básicamente, esto agrega un valor realmente pequeño a la cadena para obligarla a redondearse correctamente en las instancias impredecibles donde normalmente no roundfunciona con la función cuando lo espera. Un valor conveniente para agregar es 1e-Xdónde Xestá la longitud de la cadena de números que está tratando de usar rounden más 1.
El enfoque de uso 10**(-len(val)-1)fue deliberado, ya que es el número pequeño más grande que puede agregar para forzar el cambio, al tiempo que garantiza que el valor que agregue nunca cambie el redondeo, incluso si .falta el decimal . Podría usar solo 10**(-len(val))con una condición if (val>1)para restar 1más ... pero es más simple restar siempre, 1ya que eso no cambiará mucho el rango aplicable de números decimales que esta solución puede manejar adecuadamente. Este enfoque fallará si sus valores alcanzan los límites del tipo, fallará, pero para casi todo el rango de valores decimales válidos debería funcionar.
Entonces el código terminado será algo así como:
def main():
printC(formeln(typeHere()))
def roundTraditional(val,digits):
return round(val+10**(-len(str(val))-1))
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(roundTraditional(answer,2))
print "\nYour Celsius value is " + answer + " C.\n"
main()
... debería darte los resultados que esperas.
También puede usar la biblioteca decimal para lograr esto, pero el contenedor que propongo es más simple y puede preferirse en algunos casos.
Editar: Gracias Blckknght por señalar que el 5caso marginal ocurre solo para ciertos valores aquí .