Estoy obteniendo muchos decimales en la salida de este código (convertidor de Fahrenheit a Celsius).
Mi código actualmente se ve así:
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()
Entonces mi pregunta es, ¿cómo hago para que el programa redondee cada respuesta al segundo decimal?
Respuestas:
Puede usar la
round
función, que toma como primer argumento el número y el segundo argumento es la precisión después del punto decimal.En su caso, sería:
fuente
round()
flotadores puede ser sorprendente: por ejemplo,round(2.675, 2)
da en2.67
lugar de lo esperado2.68
" .round(2.675, 2)
da2.67
más que2.68
nada no tiene nada que ver con el redondeo de Banker.Usando
str.format()
la sintaxis para mostraranswer
con dos decimales (sin alterar el valor subyacente deanswer
):Dónde:
:
introduce la especificación de formato0
habilita el relleno de cero con signo para los tipos numéricos.2
establece la precisión en2
f
muestra el número como un número de punto fijofuente
0.5357...
está más cerca de0.54
que0.53
, por lo que redondear a0.54
tiene sentido."{:0.2f}".format(1.755)
-> 1.75"{:0.2f}".format(1.7551)
-> 1.76 - Sin embargo, ambos habrían esperado igualar 1.76.La mayoría de las respuestas sugeridas
round
oformat
.round
a veces se redondea y, en mi caso, necesitaba que el valor de mi variable se redondeara hacia abajo y no solo se mostrara como tal.Encontré la respuesta aquí: ¿Cómo redondeo un número de coma flotante hasta cierto lugar decimal?
o:
fuente
round(2.354, 2) # -> 2.35
10**d
lugar deint('1' + ('0' * d))
.fuente
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 un5
.Aquí hay algunos ejemplos de este comportamiento impredecible:
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
round
función funcione como se espera y necesitaimport
cosas adicionales comoDecimal
.¡Ajá! Entonces, en base a esto, podemos hacer una función ...
Básicamente, esto agrega un valor realmente pequeño a la cadena para obligarla a redondearse correctamente en las instancias impredecibles donde normalmente no
round
funciona con la función cuando lo espera. Un valor conveniente para agregar es1e-X
dóndeX
está la longitud de la cadena de números que está tratando de usarround
en más1
.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 solo10**(-len(val))
con una condiciónif (val>1)
para restar1
más ... pero es más simple restar siempre,1
ya 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:
... 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
5
caso marginal ocurre solo para ciertos valores aquí .fuente
Simplemente use el formato con% .2f que le da redondeo a 2 decimales.
fuente
Puede usar el operador de formato de cadena de python "%". "% .2f" significa 2 dígitos después del punto decimal.
http://docs.python.org/2/library/stdtypes.html#string-formatting
fuente
Puede usar el operador redondo para hasta 2 decimales
fuente
Puedes usar la función redonda.
le dará una respuesta de 80.234
En su caso, use
Espero que esto ayude :)
fuente
Si necesita evitar el problema de punto flotante en los números de redondeo para la contabilidad, puede usar numpy round.
Necesitas instalar numpy:
y el código:
huellas dactilares
Debería usar eso si administra dinero con redondeo legal.
fuente
Aquí hay un ejemplo que usé:
fuente
No estoy seguro de por qué, pero el formato '{: 0.2f}'. (0.5357706) me da '0.54'. La única solución que funciona para mí (python 3.6) es la siguiente:
fuente
Como desea su respuesta en número decimal, no necesita escribir su variable de respuesta para str en la función printC ().
y luego use el formato de cadena de estilo printf
fuente
La respuesta es de: https://stackoverflow.com/a/29651462/8025086
fuente