Как округлить до 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
задает точность to2
-
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
просто используйте форматирование с %.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))
в основном это добавляет действительно небольшое значение к строке, чтобы заставить ее правильно округлить на непредсказуемых экземплярах, где она обычно не с