Как правильно умножить и разделить числа на угловые?

0

У меня проблема с многозначными числами. У меня есть поля типа номера с директивой ui-money-mask от https://github.com/assisrafael/angular-input-masks, где я могу вводить числа с 2 десятичными знаками. Но я хочу сохранить эти числа без разделителя, я имею в виду:

123.12 → 12312

1111.11 → 111111 и т.д.

Проблема в том, что когда я пытаюсь несколько раз на 100 удалять разделитель, иногда я получаю неправильный результат, например: 1111.11 * 100 = 111110.99999999999, но я хочу 111111.

Как я могу это исправить?

  • 0
    Умножить, а затем сделать простой Math.floor (число)?
  • 0
    Обратите внимание, что это не неправильный результат. Это просто арифметика с плавающей точкой.
Показать ещё 1 комментарий
Теги:

4 ответа

0
Лучший ответ

Это классическая проблема арифметики с плавающей запятой. В вашем случае я думаю, что самое простое решение - просто округлить:

Math.round(1111.11 * 100)

Он работает так же, как и toFixed(0) за исключением того, что он не возвращает строку.

1

Вы можете сделать это, используя toFixed(0)

Попробуйте это

parseFloat("111110.99999999999").toFixed(0)
0

Вы можете просто использовать

Math.round(1111.11 * 100)
  • 0
    это работает правильно, тогда почему голосуйте за этот ответ.
  • 1
    Потому что это не работает. parseInt(1111.11 * 100) == 111110
Показать ещё 1 комментарий
0

Вы можете сделать это, используя toFixed или Math.round

var result = parseInt(parseFloat(1111.11).toFixed(0));

NB: toFixed возвращает строку, чтобы преобразовать ее снова в integer

ИЛИ

var result = Math.round(1111.11 * 100)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню