Ответ 1
Вы можете использовать функцию round, которая принимает в качестве первого аргумента число, а второй аргумент - это точность.
В вашем случае это будет:
answer = str(round(answer, 2))
Я получаю много десятичных знаков в выводе этого кода (конвертер Фаренгейта в Цельсий).
Мой код в настоящее время выглядит так:
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-го знака после запятой?
Вы можете использовать функцию round, которая принимает в качестве первого аргумента число, а второй аргумент - это точность.
В вашем случае это будет:
answer = str(round(answer, 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
отображает номер как номер с фиксированной запятой Большинство ответов предлагается 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(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
возникает только для определенных значений .
Вы можете использовать круглую функцию.
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.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
Вы можете использовать оператор округления до 2 десятичных
num = round(343.5544, 2)
print(num) // output is 343.55
Как вы хотите, чтобы ваш ответ был десятичным, поэтому вам не нужно выводить переменную ответ на строку в функции printC().
а затем используйте printf-style String Formatting
round(12.3956 - 0.005, 2) # minus 0.005, then round.
Ответ от: fooobar.com/info/110489/...