bogdan_uman
@bogdan_uman
шлЫмазл неукЪ-поцЪ

Обрезать разрядность числа?

Здравствуйте. Не подскажите. Есть например у меня проверка на ввод в input type='text' чисел. Ну и есть обрезание по количеству разрядов, в 3 знака. Все отлично работает, но на некоторых цифрах идет неверное исчисление.
Math.trunc(32.4*1000) / 1000; // 32.4
Math.trunc(32.301*1000) / 1000; // 32.301
Math.trunc(32.3*1000) / 1000; // 32.299


Нашел конечно решение, но это какой-то костыльный костыль, и нет гарантии что на других числах не повторится
Math.trunc((32.3 + 0.0001) * 1000) / 1000; // 32.3
  • Вопрос задан
  • 347 просмотров
Решения вопроса 1
bogdan_uman
@bogdan_uman Автор вопроса
шлЫмазл неукЪ-поцЪ
Вот вреде только что придумал элегантное однострочное решение
+`${ 32.30112 }`.match(/\d+.\d{1,3}/)[0]; //32.301
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@deworkers
Middle front-end, UI designer
про способы округления тут
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
Если надо «просто отрезать» без округлений, можно работать с текстовой строкой:
function trimmer(n) {
  var s  = n.toString(), pos = s.indexOf('.');
  return parseFloat( s.substr( 0, !!~pos ? pos+4 : s.length));
}

trimmer(32.0123456) // 32.012
trimmer(32.000000001) // 32
trimmer(32.1000000001) // 32.1
trimmer(32) // 32
trimmer(.001) // 0.001
trimmer(32.987654) // 32.987
trimmer(32.9999999999) // 32.999


Если нужны округления, то использовать toFixed() ?
parseFloat( (32.3).toFixed(3)) // 32.3
parseFloat( (32.12345).toFixed(3)) // 32.123
parseFloat( (32.98765).toFixed(3)) // 32.988
parseFloat( (32.99999).toFixed(3)) // 33
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы