Как округлить до 2 десятичных знаков с помощью Python?
Я получаю много десятичных знаков в выводе этого кода (Fahrenheit to Celsius converter).
мой код в настоящее время выглядит так:
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 синтаксис до displayanswerС двумя десятичными знаками (без изменения базового значенияanswer):def printC(answer): print "\nYour Celsius value is {:0.2f}ºC.\n".format(answer)где:
:представляет формат spec0включает знак-осведомленное нул-заполнение для числовых типов.2задает точность до2fотображает число как число с фиксированной точкой
вопрос помечен: "как округлить вниз до 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
просто используйте форматирование с %.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
Как вы хотите, чтобы ваш ответ в десятичном числе, так что вам не нужно набирать свой ответ переменная в 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))в основном это добавляет очень маленькое значение к строке, чтобы заставить ее правильно округляться в непредсказуемых случаях, когда это обычно не происходит с
Comments