Как получить десятичное значение при использовании оператора деления в Python? - PullRequest
60 голосов
/ 23 сентября 2008

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

>>> 4 / 100
0

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

Ответы [ 12 ]

125 голосов
/ 23 сентября 2008

Есть три варианта:

>>> 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, благодаря ΤΖΩΤΖΙΟΥ !

24 голосов
/ 23 сентября 2008

Другие ответы подсказывают, как получить значение с плавающей запятой. Хотя это будет близко к тому, что вы хотите, оно не будет точным:

>>> 0.4/100.
0.0040000000000000001

Если вам действительно нужно значение десятичное , сделайте следующее:

>>> import decimal
>>> decimal.Decimal('4') / decimal.Decimal('100')
Decimal("0.04")

Это даст вам объект, который правильно знает, что 4/100 в base 10 равно "0.04". Числа с плавающей точкой на самом деле находятся в базе 2, то есть в двоичном, а не в десятичном виде.

7 голосов
/ 23 сентября 2008

Сделайте одно или оба условия числом с плавающей запятой, например:

4.0/100.0

В качестве альтернативы, включите функцию, которая будет по умолчанию в Python 3.0, «истинное деление», которая делает то, что вы хотите. В верхней части вашего модуля или скрипта выполните:

from __future__ import division
4 голосов
/ 23 сентября 2008

Возможно, вы захотите взглянуть и на пакет decimal в Python. Это обеспечит хорошие десятичные результаты.

>>> decimal.Decimal('4')/100
Decimal("0.04")
3 голосов
/ 23 сентября 2008

Вы должны указать Python использовать значения с плавающей запятой, а не целые числа. Вы можете сделать это, просто используя десятичную точку во входных данных:

>>> 4/100.0
0.040000000000000001
1 голос
/ 09 февраля 2019

Вы также можете попробовать добавить «.0» в конце числа.

4,0 / 100,0

1 голос
/ 08 января 2018

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

from __future__ import division

print(4/100)
print(4//100)
1 голос
/ 23 сентября 2008

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

или

4,0 / 100

1 голос
/ 23 сентября 2008

Попробуйте 4,0 / 100

0 голосов
/ 04 июля 2018

Добавьте следующую функцию в ваш код с обратным вызовом.

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

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

...