Как получить десятичное значение при использовании оператора деления в Python?


например, стандартный символ деления ' / ' округляется до нуля:

>>> 4 / 100
0

однако, я хочу, чтобы он вернул 0.04. Что я использую?

11 55

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")

попробуйте 4.0 / 100

простой маршрут 4 / 100.0

или

4.0 / 100

здесь мы имеем два возможных случая, приведенные ниже

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)

комментарий ниже для любых запросов.

импорт подразделение из будущей библиотеки, как это:

from__future__ import division