Почему некорректно работает округление?

Ссылка скопирована
1 ответ
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
    Ольга Сеть Ответ

    Проблема с округлением может возникать по нескольким причинам. Вот несколько возможных причин и способы их решения:

    1. Использование неправильного метода округления:
    Некорректное округление может быть вызвано использованием неправильного метода округления. Например, если вы используете функцию round() вместо ceil() или floor(), то результат может быть неожиданным. Убедитесь, что вы используете правильный метод округления для вашей конкретной задачи.

    2. Проблемы с точностью вычислений:
    В некоторых случаях, из-за ограничений точности вычислений в компьютере, округление может давать некорректные результаты. Например, при работе с числами с плавающей запятой. Для решения этой проблемы можно попробовать использовать функции библиотеки BCMath, которые обеспечивают более высокую точность вычислений.

    3. Неправильное задание количества знаков после запятой:
    Если вы указываете неправильное количество знаков после запятой при округлении, то результат может быть некорректным. Убедитесь, что вы указываете правильное количество знаков после запятой в функции округления.

    Пример использования правильного округления в PHP:

    $num = 10.555;
    $rounded_num = round($num, 2);
    echo $rounded_num; // Выведет 10.56

    $num = 10.555; $rounded_num = round($num, 2); echo $rounded_num; // Выведет 10.56

    Если после применения этих рекомендаций проблема с округлением все еще остается, то возможно стоит более детально изучить контекст, в котором происходит округление, и проверить другие возможные причины некорректной работы.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно