Вопрос:
Наткнулся на странную штуку в ExtJS (версии 6.5.0 и 7.8.0) и вообще в JavaScript. Когда умножаешь некоторые десятичные числа на 10 в какой-то степени, результат получается чуть-чуть неправильный. Вроде мелочь, но для точных расчетов это проблема.
Вот пример кода:
console.log(3.7 * 1000); // Ожидаем 3700, а получаем 3699.9999999999995
console.log(3.7 * 1000000); // Ожидаем 3700000, а получаем 3699999.9999999995
console.log(3.7 * 100000000); // Ожидаем 370000000, а получаем 369999999.99999994
Это происходит во всех браузерах, не только в Chrome или Firefox. Кто-нибудь сталкивался с таким? Как это можно исправить или обойти?
Это классическая проблема с плавающей запятой в JS. Для точных расчетов используй библиотеку decimal.js - она решает эту проблему. Альтернативный вариант - хранить числа как целые (например, копейки вместо рублей) и делить на 100 при выводе. Или просто округляй результат через toFixed() или Math.round(), если точность не критична. Главное - помни об этой особенности JS и выбирай подход в зависимости от задачи.
Да, такая проблема реально бесит. Это из-за того, как JavaScript хранит числа с плавающей запятой. Есть пара способов обойти: можно округлять результат через toFixed() или Math.round(), если точность не так важна. Или использовать специальные библиотеки типа decimal.js для более точных вычислений. А еще вариант - хранить числа как целые и делить при выводе. Главное - помнить про эту особенность JS и не париться.
да, эта проблема знакома многим программистам. прикол в том, как жс работает с десятичными числами. чтобы решить, можно попробовать округлять результат или использовать специальные библиотеки для точных расчетов. я обычно просто округляю через Math.round(), если не нужна супер-точность. а если важна каждая копейка, то храню числа как целые и потом делю на 100 при выводе. главное помнить про эту особенность языка и не паниковать, когда видишь такие странные результаты)