https://www.freecodecamp.com/challenges/exact-change
У меня возникла проблема с этой проблемой из-за неточных расчетов при работе со значением «0,01». Иногда возвращаемое значение расчета имело неправильное значение после 7 или 8 знаков после запятой (например, 1.01 - 0.01 = 0.999999996).
У кого-нибудь была подобная проблема?
Мне удалось решить эту проблему, но все же мне потребовалось много времени, чтобы сделать это из-за этой проблемы, которой не должно быть ... Кто-нибудь знает, почему это так. Я считаю, что это связано с тем, что js сохраняет целочисленные и плавающие значения ...
Привет, @FatKoala. Вы можете прочитать все об арифметике с плавающей запятой (и хороших способах ее обработки) здесь и в других местах в Интернете.
И забавный факт: JavaScript не делает различия типов между числами с плавающей запятой и целыми числами. 1
и 1.00000
- это одно и то же число в JS (хотя это не является строго причиной ошибок точности с плавающей запятой, с которыми вы столкнулись).
Возможно, стоит включить ресурс об арифметике с плавающей запятой (хотя и не обязательно тот, который я связал выше) в полезные ссылки по этой задаче, поскольку она, вероятно, первая, которая требует от пользователей понимания проблем точности, которые она вызывает.
cc @ FreeCodeCamp / модераторам задач за отзывы о добавлении такой ссылки (и какую ссылку добавить)
Да, это очень интересная тема, и ИМХО ее стоит затронуть.
В JavaScript есть только числовой тип данных, который равен number
и обычно это 64-битная числа с плавающей запятой (с учетом того, как браузеры (точнее, JS Engine) реализуют их).
Отметим это как «Помощь, которую нужно кому-то в сообществе, чтобы связать хороший ресурс». Я тоже попробую поискать, но да, лучше, если это будет от кого-то, кто, возможно, является экспертом по языку.
Спасибо за ссылку, это было полезно ... я действительно расстроился из-за проблемы, пока писал код ... теперь в этом есть смысл ... Я согласен, что это должно быть где-то связано или объяснено ранее, что такие вещи происходят ...
Я немного покопался , и ссылка
@dhcodes, пожалуйста, продолжайте: wink:
Самый полезный комментарий
Привет, @FatKoala. Вы можете прочитать все об арифметике с плавающей запятой (и хороших способах ее обработки) здесь и в других местах в Интернете.
И забавный факт: JavaScript не делает различия типов между числами с плавающей запятой и целыми числами.
1
и1.00000
- это одно и то же число в JS (хотя это не является строго причиной ошибок точности с плавающей запятой, с которыми вы столкнулись).Возможно, стоит включить ресурс об арифметике с плавающей запятой (хотя и не обязательно тот, который я связал выше) в полезные ссылки по этой задаче, поскольку она, вероятно, первая, которая требует от пользователей понимания проблем точности, которые она вызывает.
cc @ FreeCodeCamp / модераторам задач за отзывы о добавлении такой ссылки (и какую ссылку добавить)