Почему некорректно работает округление?
let convertMina =1.23610000; // это число округляем к меньшему и сводим к кратному 0.10000000 // написал функцию function rstMINAUSDT(num,stepSize=0.10000000){return Math.floor(num/stepSize)*stepSize;} console.log(rstMINAUSDT(convertMina)); // что получаю в терминале ---->>>> 1.2000000000000002 /// почему???? Должно быть ---- 1.20000000 |
let convertMina =1.23610000; // это число округляем к меньшему и сводим к кратному 0.10000000 // написал функцию function rstMINAUSDT(num,stepSize=0.10000000){return Math.floor(num/stepSize)*stepSize;} console.log(rstMINAUSDT(convertMina)); // что получаю в терминале ---->>>> 1.2000000000000002 /// почему???? Должно быть ---- 1.20000000
Дополнительно:
Меньше умножай и дели на дробные. Умножай и дели на 10/100/1000 и будет тебе счастье. Но не всегда.
// что получаю в терминале ---->>>> 1.2000000000000002
/// почему???? Должно быть ---- 1.20000000
про погрешность можно почитать на learn, и уже от этого отталкиваться углубляться если интересно
https://learn.javascript.ru/number#netochnye-vychi...
Ответы:
Добро пожаловать в мир вычислений с плавающей точкой! Это вполне нормальное поведение и оно такое везде. Если нужна высокая точность - используйте BigNumber/Decimal и т.п.
- // вот так показывает 1.2 - в принципе как и надо. То есть это нормально такие решения делать??
console.log(rstMINAUSDT(convertMina).toFixed(1)); - Нормально - решать задачи предназначенным для этого инструментом. Если надо примерно и быстро посчитать - есть флоат, если надо точно - десимал.
- Sun2790, https://0.30000000000000004.com/ классика жанра
Все верно сделано, просто потом использовать toFixed(8) что бы конвертировать в строку. И эту строку уже использовать в API и в UI.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Проблема с округлением может возникать по нескольким причинам. Вот несколько возможных причин и способы их решения:
1. Использование неправильного метода округления:
Некорректное округление может быть вызвано использованием неправильного метода округления. Например, если вы используете функцию round() вместо ceil() или floor(), то результат может быть неожиданным. Убедитесь, что вы используете правильный метод округления для вашей конкретной задачи.
2. Проблемы с точностью вычислений:
В некоторых случаях, из-за ограничений точности вычислений в компьютере, округление может давать некорректные результаты. Например, при работе с числами с плавающей запятой. Для решения этой проблемы можно попробовать использовать функции библиотеки BCMath, которые обеспечивают более высокую точность вычислений.
3. Неправильное задание количества знаков после запятой:
Если вы указываете неправильное количество знаков после запятой при округлении, то результат может быть некорректным. Убедитесь, что вы указываете правильное количество знаков после запятой в функции округления.
Пример использования правильного округления в PHP:
$num = 10.555; $rounded_num = round($num, 2); echo $rounded_num; // Выведет 10.56
Если после применения этих рекомендаций проблема с округлением все еще остается, то возможно стоит более детально изучить контекст, в котором происходит округление, и проверить другие возможные причины некорректной работы.