Как округлить до 2 десятичных знаков с помощью Python?

Я получаю много десятичных знаков на выходе этого кода (конвертер Фаренгейта в Цельсий).

мой код в настоящее время выглядит так:

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()

Итак, мой вопрос в том, как мне успешно сделать программу округлить каждый ответ до 2 десятичных знаков?

12 ответов


можно использовать круглые функция, которая принимает в качестве первого аргумента число, а второй аргумент-точность.

в вашем случае, это будет выглядеть так:

answer = str(round(answer, 2))

используя str.format() ' s синтаксис to дисплей answer С двумя десятичными знаками (без изменения базового значения answer):

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

где:

  • : представляет формат spec
  • 0 включает знак-осведомленное нул-заполнение для числовых типов
  • .2 задает точность to 2
  • f отображает число как число с фиксированной точкой

вопрос помечен: "как округлить вниз до 2 десятичных знаков"

большинство предложенных ответов round или format. round иногда округляется, и в моем случае мне нужно было стоимостью моей переменной, которая всегда округляется вниз (а не просто отображается как таковая).

round(2.357, 2)  # -> 2.36

нашел правда ответ здесь: как округлить число с плавающей точкой до определенного знака место?

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

или:

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

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

просто используйте форматирование с %.2f, который дает вам округление до 2 десятичных знаков.

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

вы можете использовать оператор форматирования строк python"%". "%.2f " означает 2 цифры после десятичной запятой.

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


Вы можете использовать функцию округл.

round(80.23456, 3)

даст вам ответ 80.234

в вашем случае, использовать

answer = str(round(answer, 2))

надеюсь, что это помогает :)


вот пример, который я использовал:

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)

Не знаю почему, но ' {: 0.2 f}'.формат(0.5357706) дает мне '0.54'. Единственное решение, которое работает для меня (python 3.6), это следующее:

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

Как вы хотите, чтобы ваш ответ в десятичном числе, так что вам не нужно typecast ваш ответ переменная к str в функции printC ().

и затем использовать форматирование строк в стиле printf


вы хотите округлить свой ответ.

round(value,significantDigit) является обычным решением для этого, однако это иногда не работает так, как можно было бы ожидать с математической точки зрения, когда цифра сразу уступает (слева) цифре, к которой вы округляете, имеет 5.

вот несколько примеров такого непредсказуемого поведения:

>>> 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

предполагая, что ваше намерение состоит в том, чтобы сделать традиционное округление статистики в науки, это удобная обертка, чтобы получить round функция работает так, как ожидалосьimport дополнительные вещи, как Decimal.

>>> round(0.075,2)

0.07

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

0.08

Аха! Исходя из этого, мы можем сделать функцию...

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

в основном это добавляет действительно небольшое значение к строке, чтобы заставить ее правильно округлить на непредсказуемых экземплярах, где она обычно не с


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

ответ от:https://stackoverflow.com/a/29651462/8025086