Как можно предотвратить переполнение при преобразовании float в bigint в Python? - PullRequest
0 голосов
/ 17 апреля 2019

При обрезке больших десятичных знаков в результате деления возникает проблема переполнения. E.g.:

>>> from math import floor
>>> int(100000000000000123.1)
100000000000000128
>>> floor(100000000000000123.1)
100000000000000128

Из типа видно, что число представляет собой обычное число с плавающей точкой, и оно не может быть сохранено с необходимой точностью. Так что даже с floor () я сталкиваюсь с той же проблемой. Есть ли лучший тип данных для хранения «длинных чисел с плавающей запятой»? И если да, как я могу заставить подразделения bigints не возвращать float низкой точности? Кстати, я использую Python 3.6 64-bit.

1 Ответ

0 голосов
/ 17 апреля 2019

Вы хотите, чтобы модуль stdlib десятичный

import decimal

long_number = '100000000000000123.1'  # note that this is a string
your_decimal = decimal.Decimal(long_number)

Decimal s был достаточно умен, чтобы возвращать Decimal объектов из любой стандартной математической операции

result = your_decimal - 123
assert isinstance(result, decimal.Decimal)
assert your_decimal == decimal.Decimal('100000000000000000.1')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...