Как получить десятичное значение при использовании оператора деления в Python?
-
02-07-2019 - |
Вопрос
Например, стандартный символ деления '/' округляется до нуля:
>>> 4 / 100
0
Однако я хочу, чтобы он возвращал 0,04.Что я использую?
Решение
Есть три варианта:
>>> 4 / float(100)
0.04
>>> 4 / 100.0
0.04
это то же поведение, что и C, C++, Java и т. д., или
>>> from __future__ import division
>>> 4 / 100
0.04
Вы также можете активировать это поведение, передав аргумент -Qnew
для интерпретатора Python:
$ python -Qnew
>>> 4 / 100
0.04
Второй вариант будет использоваться по умолчанию в Python 3.0.Если вы хотите использовать старое целочисленное деление, вам придется использовать //
оператор.
Редактировать:добавлен раздел о -Qnew
, благодаря ΤΖΩΤΖΙΟΥ!
Другие советы
Другие ответы подсказывают, как получить значение с плавающей запятой.Хотя это будет близко к тому, что вы хотите, это не будет точно:
>>> 0.4/100.
0.0040000000000000001
Если вы действительно хотите десятичная дробь значение, сделайте это:
>>> import decimal
>>> decimal.Decimal('4') / decimal.Decimal('100')
Decimal("0.04")
Это даст вам объект, который правильно знает, что 4/100 в основание 10 составляет «0,04».Числа с плавающей запятой на самом деле имеют базу 2, т.е.двоичный, а не десятичный.
Сделайте один или оба термина числом с плавающей запятой, например:
4.0/100.0
Альтернативно, включите функцию «истинное деление», которая будет использоваться по умолчанию в Python 3.0, и которая будет делать то, что вы хотите.В верхней части вашего модуля или скрипта выполните:
from __future__ import division
Возможно, вы захотите посмотреть Python десятичная дробь пакет тоже.Это обеспечит хорошие десятичные результаты.
>>> decimal.Decimal('4')/100
Decimal("0.04")
Вам нужно указать Python использовать значения с плавающей запятой, а не целые числа.Вы можете сделать это, просто используя десятичную точку во входных данных:
>>> 4/100.0
0.040000000000000001
Попробуйте 4.0/100
Простой маршрут 4/100.0
или
4.0 / 100
Здесь у нас есть два возможных случая, приведенных ниже.
from __future__ import division
print(4/100)
print(4//100)
Вы также можете попробовать добавить «.0» в конце числа.
4.0/100.0
Вы не можете получить десятичное значение, разделив одно целое число на другое, таким образом вы всегда получите целое число (результат усекается до целого числа).Вам нужно, чтобы хотя бы одно значение было десятичным числом.
Добавьте в свой код следующую функцию с ее обратным вызовом.
# 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
Эта функция работает на основе «Алгоритма Евклида».Эта функция очень полезна, если вы не хотите импортировать в свой проект внешние файлы заголовков.
Синтекс:разделить([делимое], [делитель], [десятичный знак (необязательно))
Код: divide(1, 7, 10)
ИЛИ divide(1, 7)
Комментируйте ниже по любым вопросам.
Импортируйте подразделение из будущей библиотеки следующим образом:
from__future__ import division