round redondear places float delete decimals decimales python rounding

redondear - round decimals python



¿Cómo redondear a 2 decimales con Python? (12)

Estoy obteniendo muchos decimales en la salida de este código (Fahrenheit to Celsius converter).

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 lograr que el programa redondee cada respuesta a 2 decimales?


Aquí hay un ejemplo que utilicé:

def volume(self): return round(pi * self.radius ** 2 * self.height, 2) def surface_area(self): return round((2 * pi * self.radius * self.height) + (2 * pi * self.radius ** 2), 2)


Como quiera su respuesta en número decimal, por lo que no necesita convertir su variable de respuesta a str en la función printC ().

y luego use el formato de cadena de estilo printf


La pregunta está etiquetada: "cómo redondear a 2 decimales"

La mayoría de las respuestas sugirieron round o format . round veces se redondea, y en mi caso necesitaba que el valor de mi variable siempre se redondeara hacia abajo (no solo se mostrara como tal).

round(2.357, 2) # -> 2.36

Encontré la verdadera respuesta aquí: ¿Cómo redondear un número de coma flotante hasta cierto lugar decimal?

import math v = 2.357 print(math.ceil(v*100)/100) # -> 2.36 print(math.floor(v*100)/100) # -> 2.35

o:

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


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:

def ceil_floor(x): import math return math.ceil(x) if x < 0 else math.floor(x) def round_n_digits(x, n): import math return ceil_floor(x * math.pow(10, n)) / math.pow(10, n) round_n_digits(-0.5357706, 2) -> -0.53 round_n_digits(0.5357706, 2) -> 0.53


Puede usar el operador de formato de cadena de python "%". "% .2f" significa 2 dígitos después del punto decimal.

def typeHere(): 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(Fahrenheit): Celsius = (Fahrenheit - 32.0) * 5.0/9.0 return Celsius def printC(answer): print "/nYour Celsius value is %.2f C./n" % answer def main(): printC(formeln(typeHere())) main()

http://docs.python.org/2/library/stdtypes.html#string-formatting


Puede usar la función de round , que toma como primer argumento el número y el segundo argumento es la precisión.

En tu caso, sería:

answer = str(round(answer, 2))


Puedes usar la función de ronda.

round(80.23456, 3)

le dará una respuesta de 80.234

En tu caso, usa

answer = str(round(answer, 2))

Espero que esto ayude :)


Quieres redondear tu respuesta.

round(value,significantDigit) es la solución común para hacer esto, sin embargo, esto a veces no funciona como uno esperaría desde una perspectiva matemática cuando el dígito inmediatamente inferior (a la izquierda) del dígito al 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

Asumiendo que tu intención es hacer el redondeo tradicional para las estadísticas en las ciencias, esta es una práctica herramienta para que la función de la round funcione como se espera, necesitando import cosas adicionales como Decimal .

>>> round(0.075,2) 0.07 >>> round(0.075+10**(-2*6),2) 0.08

Aha! Entonces basado en esto podemos hacer una función ...

def roundTraditional(val,digits): return round(val+10**(-len(str(val))-1))

Básicamente, esto agrega un valor realmente pequeño a la cadena para obligarla a redondearse correctamente en las instancias impredecibles en las que normalmente no funciona con la función round cuando lo esperas. Un valor conveniente para agregar es 1e-X donde X es la longitud de la cadena de números que está tratando de usar en round más 1 .

El enfoque de usar 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 agrega nunca cambia el redondeo, incluso si es el decimal . Está perdido. Podría usar solo 10**(-len(val)) con una condición if (val>1) para restar 1 más ... pero es más simple simplemente restar 1 porque eso no cambiará mucho el rango aplicable de números decimales que esta solución alternativa puede manejar adecuadamente. Este enfoque fallará si sus valores alcanzan los límites del tipo, esto fallará, pero para casi todo el rango de valores decimales válidos debería funcionar.

Entonces el código final 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 darle los resultados que espera.

También puede usar la biblioteca de 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 caso de 5 flecos se produce solo para ciertos valores here .


Simplemente use el formato con% .2f que le da redondeo a 2 decimales.

def printC(answer): print "/nYour Celsius value is %.2f C./n" % answer


Usando la str.format() para mostrar la answer con dos decimales (sin alterar el valor subyacente de la answer ):

def printC(answer): print "/nYour Celsius value is {:0.2f}ºC./n".format(answer)

Dónde:

  • : introduce la especificación de formato
  • 0 habilita el relleno cero con reconocimiento de signos para tipos numéricos
  • .2 establece la precision en 2
  • f muestra el número como un número de punto fijo

float(str(round(answer, 2))) float(str(round(0.0556781255, 2)))


round(12.3956 - 0.005, 2) # minus 0.005, then round.

La respuesta es de: https://.com/a/29651462/8025086