Как получить десятичное значение при использовании оператора деления в Python?
например, стандартный символ деления ' / ' округляется до нуля:
>>> 4 / 100
0
однако, я хочу, чтобы он вернул 0.04. Что я использую?
11 ответов:
есть три варианта:
>>> 4 / float(100) 0.04 >>> 4 / 100.0 0.04
что такое же поведение, как с, C++, Java и т. д., или
>>> from __future__ import division >>> 4 / 100 0.04
вы также можете активировать это поведение, передавая параметр
-Qnew
для интерпретатора Python:$ python -Qnew >>> 4 / 100 0.04
второй вариант будет по умолчанию в Python 3.0. Если вы хотите иметь старое целочисленное деление, вы должны использовать
//
оператора.Edit: добавлен раздел о
-Qnew
, спасибо ΤΖΩΤΖΙΟΥ!
другие ответы предлагают, как получить значение с плавающей запятой. Хотя этот wlil будет близок к тому, что вы хотите, это не будет точно:
>>> 0.4/100. 0.0040000000000000001
Если вы действительно хотите decimal значением, сделать это:
>>> import decimal >>> decimal.Decimal('4') / decimal.Decimal('100') Decimal("0.04")
это даст вам объект, который правильно знает, что 4 / 100 в базовый 10 это "0.04". Числа с плавающей запятой фактически находятся в базе 2, т. е. двоичные, а не десятичные.
сделайте один или оба термина числом с плавающей запятой, например:
4.0/100.0
кроме того, включите функцию, которая будет по умолчанию в Python 3.0, "true division", которая делает то, что вы хотите. В верхней части вашего модуля или скрипта выполните:
from __future__ import division
вы должны сказать Python использовать значения с плавающей запятой, а не целые числа. Вы можете сделать это просто, используя десятичную точку в входы:
>>> 4/100.0 0.040000000000000001
вы можете посмотреть на Python decimal, также. Это обеспечит хорошие десятичные результаты.
>>> decimal.Decimal('4')/100 Decimal("0.04")
здесь мы имеем два возможных случая, приведенные ниже
from __future__ import division print(4/100) print(4//100)
вы не можете получить десятичное значение, разделив одно целое число с другим, вы всегда получите целое число таким образом (результат усекается до целого числа). Вам нужно хотя бы одно значение, чтобы быть десятичным числом.
добавьте следующую функцию в ваш код обратного вызова.
# Starting of the function def divide(number_one, number_two, decimal_place = 4): quotient = number_one/number_two remainder = number_one % number_two if remainder != 0: quotient_str = str(quotient) for loop in range(0, decimal_place): if loop == 0: quotient_str += "." surplus_quotient = (remainder * 10) / number_two quotient_str += str(surplus_quotient) remainder = (remainder * 10) % number_two if remainder == 0: break return float(quotient_str) else: return quotient #Ending of the function # Calling back the above function # Structure : divide(<divident>, <divisor>, <decimal place(optional)>) divide(1, 7, 10) # Output : 0.1428571428 # OR divide(1, 7) # Output : 0.1428
эта функция работает на основе алгоритма деления "Евклид". Эта функция очень полезна, если вы не хотите импортировать какие-либо внешние файлы заголовков в свой проект.
Syntex: divide ([divident], [divisor], [decimal place (необязательно))
код :
divide(1, 7, 10)
илиdivide(1, 7)
комментарий ниже для любых запросов.