Подтвердить что ты не робот

Как округлить до 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-го знака после запятой?

4b9b3361

Ответ 1

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

В вашем случае это будет:

answer = str(round(answer, 2))

Ответ 2

Использование str.format() syntax для отображения answer с двумя десятичными знаками (без изменения базового значения answer):

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

Где:

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

Ответ 3

Большинство ответов предлагается 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

Ответ 4

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

Ответ 5

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

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

Ответ 6

Вы можете использовать оператор форматирования строк для 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

Ответ 7

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

round(value,significantDigit) является обычным решением для этого, однако эта иногда не работает, как можно было бы ожидать из математической точки зрения, когда цифра сразу же уступает (слева от) цифре, re rounding to имеет значение 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, когда вы ожидаете ее. Удобное значение для добавления - 1e-X, где X - длина строки, которую вы пытаетесь использовать round в плюсе 1.

Подход использования 10**(-len(val)-1) был преднамеренным, так как это самое большое небольшое число, которое вы можете добавить, чтобы заставить сдвиг, а также гарантируя, что добавленное вами значение никогда не изменяет округление, даже если отсутствует десятичное .. Я мог бы использовать только 10**(-len(val)) с condiditional if (val>1), чтобы вычесть 1 больше... но проще просто вычесть 1, поскольку это не изменит много применимого диапазона десятичных чисел, которое это обходное решение может правильно ручка. Этот подход не удастся, если ваши значения достигнут пределов типа, это не удастся, но для почти полного диапазона действительных десятичных значений он должен работать.

Таким образом, готовый код будет выглядеть примерно так:

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

... должен дать вам ожидаемые результаты.

Вы также можете использовать библиотеку decimal, но оболочка, которую я предлагаю, проще и может быть предпочтительной в некоторых случаях.


Изменить: Спасибо Blckknght за то, что случай 5 возникает только для определенных значений .

Ответ 8

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

round(80.23456, 3)

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

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

answer = str(round(answer, 2))

Надеюсь, что это поможет:)

Ответ 9

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

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)

Ответ 10

Не знаю почему, но формат {: 0.2f} '. (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

Ответ 11

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

num = round(343.5544, 2)
print(num) // output is 343.55

Ответ 12

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

а затем используйте printf-style String Formatting