Как получить точное значение с плавающей точкой в ​​Python? - PullRequest
0 голосов
/ 25 июня 2018

У меня есть список чисел с плавающей точкой.Мне нужно выполнить определенные операции сложения и умножения этих чисел, и логика кода требует точного ответа (например, сравнение с другими числами в том же списке).Но это не дает точного ответа. Поиск решения аналогичной проблемы предполагал использование десятичного класса.Тем не менее та же проблема сохраняется.Вот пример ниже:

from decimal import Decimal
Decimal(1.2)*Decimal(2)
Decimal('2.399999999999999911182158030')

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Проблема в том, что Decimal(1.2) использует значение с плавающей запятой для 1.2, в то время как вы хотите точное значение. Вместо этого используйте строки, чтобы использовать точное значение и получить желаемый результат:

>>> from decimal import Decimal
>>> Decimal(1.2)
Decimal('1.1999999999999999555910790149937383830547332763671875')
>>> Decimal("1.2")
Decimal('1.2')
>>> Decimal("1.2")*Decimal("2")
Decimal('2.4')
0 голосов
/ 25 июня 2018

Если вы хотите использовать модуль decimal, пожалуйста, установите preciscion соответственно.Пример:

from decimal import Decimal
from decimal import getcontext

# your code without setting 'prec'
print('Precision :', getcontext().prec)
a = Decimal(1.2) * Decimal(2)
print('result :', a)

# setting 'prec' to 16
getcontext().prec = 16
print('Precision :', getcontext().prec)
a = Decimal(1.2) * Decimal(2)
print('result :', a)

вывод:

Precision : 28
result : 2.399999999999999911182158030
Precision : 16
result : 2.400000000000000

Для получения дополнительной информации см. Документацию десятичного модуля

...