Формат строки приведения в переменной с плавающей точкой возвращает неверное значение - PullRequest
0 голосов

Я делаю код для преобразования двоичных чисел от 0 до 1 в десятичную. Я сделал код, протестировал с 0,1 (эквивалентно 0,5 в десятичном виде), и он работал. Когда я проверил это с 0,01 и 0,001, мне дали неправильные ответы (хотя и близко). Я пошел к репетитору по питону и обнаружил, что при переходе ко второй итерации он не сможет преобразовать 0.1 float в строку. он вернул бы "0.09999999999999964". Есть ли другой способ сделать это преобразование?

Это алгоритм преобразования числовых методов.

1 Ответ

2 голосов
/ 07 июля 2019

Ошибка вызвана ошибками округления с плавающей запятой. Вы можете выбрать округление строк, используя format:

str(0.1 + 0.2)
# => ''0.30000000000000004'

'{:.10f}'.format(0.1 + 0.2)
# => '0.3000000000'

Строка формата .10f сообщает format, что вы хотите использовать число с плавающей точкой с точностью до 10 цифр.


В качестве альтернативы вы можете использовать более точные представления чисел, такие как decimal

from decimal import Decimal
str(Decimal('0.1') + Decimal('0.2'))
# => '0.3'

Обратите внимание, как 0.1 и 0.2 заключены в кавычки, чтобы сделать их строками, чтобы они не были преобразованы в float и не были обоснованы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...