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

StackOverflow https://stackoverflow.com/questions/117250

Вопрос

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

>>> 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top