Я создал PayTimeHub, набор бесплатных калькуляторов заработной платы и заработной платы - удержание зарплаты, калькулятор повышения, преобразование часов в десятичную дробь, время с половиной. Денежная математика выглядит тривиальной, пока вы ее не выпустите, и одна ошибка почти устранена, это...
Я создал PayTimeHub, набор бесплатных калькуляторов заработной платы и заработной платы - удержание зарплаты, калькулятор повышения, преобразование часов в десятичную дробь, время с половиной. Денежная математика выглядит тривиальной, пока вы ее не выпустите, и почти устранена одна ошибка, о которой стоит написать.
Установка
Каждый калькулятор на сайте берет сумму в долларах, выполняет с ней некоторые арифметические действия и показывает результат пользователю. Калькулятор повышения зарплаты умножает зарплату на процент. Калькулятор сверхурочной работы умножает почасовую ставку на 1,5. Простые вещи, пока вы не вспомните, что JavaScript выполняет математические операции с плавающей запятой.
Попробуйте это в консоли:
0,1 + 0,2
// 0.30000000000000004
А теперь представьте, что вы появляетесь на странице, которая должна сообщить кому-то его новую зарплату. Заработная плата в размере 52 000 долларов США с повышением на 3,85% должна считаться чистыми 54 000 долларов США. В зависимости от того, как вы объединяете умножение и деление, вы можете получить что-то вроде $ 53 999,999999999996, которое затем форматируется и отображается как действительно неправильное число - или, что еще хуже, округляется непоследовательно между двумя калькуляторами, которые должны согласовываться друг с другом.
Исправление
Ничего экзотического, всего лишь одна общая функция округления, которую каждый калькулятор на сайте направляет свои выходные данные в