Как мне округлить число в JavaScript?
-
05-07-2019 - |
Вопрос
Работая над проектом, я наткнулся на JS-скрипт, созданный бывшим сотрудником, который в основном создает отчет в виде
Name : Value
Name2 : Value2
и т.д.
Проблема заключается в том, что значения иногда могут быть с плавающей точкой (с разной точностью), целыми числами или даже в виде 2.20011E+17
.То, что я хочу вывести, - это чистые целые числа.Однако я не так уж много знаю о JavaScript.Как бы я мог написать метод, который принимает эти иногда плавающие значения и превращает их в целые числа?
Решение
Вам нужно преобразовать свои входные данные в число, а затем округлить их:
function toInteger(number){
return Math.round( // round to nearest integer
Number(number) // type cast your input
);
};
Или как однострочник:
function toInt(n){ return Math.round(Number(n)); };
Тестирование с различными значениями:
toInteger(2.5); // 3
toInteger(1000); // 1000
toInteger("12345.12345"); // 12345
toInteger("2.20011E+17"); // 220011000000000000
Другие советы
Если вам нужно округлить до определенного количества цифр, используйте следующую функцию
function roundNumber(number, digits) {
var multiple = Math.pow(10, digits);
var rndedNum = Math.round(number * multiple) / multiple;
return rndedNum;
}
В соответствии с Спецификация ECMAScript, числа в JavaScript представлены только 64-разрядным форматом двойной точности IEEE 754.Следовательно, в JavaScript на самом деле не существует целочисленного типа.
Что касается округления этих чисел, то существует несколько способов добиться этого.В Математика object предоставляет нам три метода округления, которые мы можем использовать:
В Математический раунд() наиболее часто используемый, он возвращает значение, округленное до ближайшего целого числа.Тогда есть еще Математический этаж() который возвращает наибольшее целое число, меньшее или равное числу.Наконец, у нас есть Математика.ceil() функция, которая возвращает наименьшее целое число, большее или равное числу.
Существует также Исправлено() это возвращает строку, представляющую число с использованием обозначения с фиксированной запятой.
Ps.:Есть нет 2 - го аргумента в Математический раунд() способ.В Исправлено() является не специфичный для IE, его внутри спецификация ECMAScript также
Вот способ иметь возможность использовать Math.round()
со вторым аргументом (количество десятичных знаков для округления):
// 'improve' Math.round() to support a second argument
var _round = Math.round;
Math.round = function(number, decimals /* optional, default 0 */)
{
if (arguments.length == 1)
return _round(number);
var multiplier = Math.pow(10, decimals);
return _round(number * multiplier) / multiplier;
}
// examples
Math.round('123.4567', 2); // => 123.46
Math.round('123.4567'); // => 123
Вы также можете использовать toFixed(x)
или toPrecision(x)
где x это количество цифр.
Оба этих метода поддерживаются во всех основных браузерах
Вы можете использовать Математический раунд() для округления чисел до ближайшего целого числа.
Math.round(532.24) => 532
Кроме того, вы можете использовать Синтаксический анализ() и Плавающий парс () привести переменную к определенному типу, в данном случае к целому числу с плавающей запятой.
Очень хорошее приближение для округления:
function Rounding (number, precision){
var newNumber;
var sNumber = number.toString();
var increase = precision + sNumber.length - sNumber.indexOf('.') + 1;
if (number < 0)
newNumber = (number - 5 * Math.pow(10,-increase));
else
newNumber = (number + 5 * Math.pow(10,-increase));
var multiple = Math.pow(10,precision);
return Math.round(newNumber * multiple)/multiple;
}
Только в некоторых случаях, когда длина десятичной части числа очень велика, это будет неверно.
Математический этаж (19.5) = 19 также должен работать.