Я получаю много десятичных знаков при выводе этого кода (конвертер Фаренгейта в Цельсий).
Мой код в настоящее время выглядит так:
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
функцию, которая принимает в качестве первого аргумента число, а второй аргумент - точность после десятичной точки.В вашем случае это будет:
источник
round()
для чисел с плавающей точкой может быть удивительным: например,round(2.675, 2)
дает2.67
вместо ожидаемого2.68
. »round(2.675, 2)
дает,2.67
а не2.68
имеет ничего общего с округлением банкира.Используя
str.format()
«ы синтаксис для отображенияanswer
с двумя десятичными знаками (без изменения базовой стоимостиanswer
):Куда:
:
вводит спецификацию формата0
разрешает добавление нуля с учетом знака для числовых типов.2
устанавливает точность в2
f
отображает номер как число с фиксированной точкойисточник
0.5357...
ближе к0.54
чем0.53
, поэтому0.54
имеет смысл округлять до ."{:0.2f}".format(1.755)
-> 1,75"{:0.2f}".format(1.7551)
-> 1,76 - Тем не менее, я бы ожидал равным 1,76.Большинство предложенных ответов
round
илиformat
.round
иногда округляется, и в моем случае мне нужно, чтобы значение моей переменной было округлено, а не просто отображено как таковое.Я нашел ответ здесь: Как мне округлить число с плавающей запятой до определенного десятичного знака?
или:
источник
round(2.354, 2) # -> 2.35
10**d
вместоint('1' + ('0' * d))
.источник
Вы хотите округлить свой ответ.
round(value,significantDigit)
Это обычное решение для этого, однако иногда это не работает так, как можно было бы ожидать с математической точки зрения, когда цифра, непосредственно уступающая (слева от) цифре, к которой вы округляете, имеет5
.Вот несколько примеров такого непредсказуемого поведения:
Предполагая, что вы намереваетесь сделать традиционное округление для статистики в науке, это удобная оболочка, чтобы заставить
round
функцию работать так, как ожидалось, и требуетimport
дополнительных вещей, таких какDecimal
.Ага! На основании этого мы можем сделать функцию ...
По сути, это добавляет действительно маленькое значение к строке, чтобы заставить ее правильно округляться в непредсказуемых случаях, когда она обычно не работает с
round
функцией, когда вы этого ожидаете. Удобное значение для добавления - это1e-X
гдеX
длина номер строки , которую вы пытаетесь использоватьround
на плюс1
.Подход использования
10**(-len(val)-1)
был преднамеренным, так как это наибольшее небольшое число, которое вы можете добавить, чтобы форсировать сдвиг, и при этом гарантировать, что добавляемое вами значение никогда не изменит округления, даже если десятичная дробь.
отсутствует. Я мог бы использовать только10**(-len(val))
с условнымif (val>1)
вычитать1
больше ... но проще всегда всегда вычитать,1
поскольку это не сильно изменит применимый диапазон десятичных чисел, который этот обходной путь может правильно обработать. Этот подход потерпит неудачу, если ваши значения достигнут пределов типа, это не удастся, но почти для всего диапазона допустимых десятичных значений это должно работать.Таким образом, готовый код будет выглядеть примерно так:
... должен дать вам ожидаемые результаты.
Вы также можете использовать десятичную библиотеку для достижения этой цели, но предложенная мной оболочка проще и может быть предпочтительнее в некоторых случаях.
Изменить: Спасибо Blckknght за указание, что
5
крайний случай происходит только для определенных значений здесь .источник
Просто используйте форматирование с% .2f, которое дает округление до 2 десятичных знаков.
источник
Вы можете использовать оператор форматирования строки python "%". «% .2f» означает 2 цифры после десятичной точки.
http://docs.python.org/2/library/stdtypes.html#string-formatting
источник
Вы можете использовать оператор округления до 2 десятичных
источник
Вы можете использовать функцию округления.
даст вам ответ 80.234
В вашем случае используйте
источник
Если вам нужно избежать проблемы с плавающей запятой с при округлении чисел для учета, вы можете использовать numpy round.
Вам нужно установить NumPy:
и код:
печать
Вы должны использовать это, если вы управляете деньгами с законным округлением.
источник
Вот пример, который я использовал:
источник
Не знаю почему, но формат {: 0.2f}. (0.5357706) дает мне 0.54. Единственное решение, которое работает для меня (Python 3.6), заключается в следующем:
источник
Поскольку вы хотите, чтобы ваш ответ был десятичным числом, вам не нужно вводить переменную ответа в str в функции printC ().
а затем использовать форматирование строки в стиле printf
источник
Ответ от: https://stackoverflow.com/a/29651462/8025086
источник