Как округлить число в JavaScript?
работая над проектом, я наткнулся на JS-скрипт, созданный бывшим сотрудником, который в основном создает отчет в виде
Name : Value
Name2 : Value2
etc.
peoblem заключается в том, что значения иногда могут быть плавающими (с разной точностью), целыми числами или даже в виде 2.20011E+17
. То, что я хочу вывести, - это чистые целые числа. Я не знаю много JavaScript, хотя. Как бы я написал метод, который берет эти иногда-плавает и делает их целые числа?
8 ответов:
вы должны преобразовать свой ввод в число, а затем вокруг них:
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 на самом деле нет целочисленного типа.
Что касается округления чисел, есть несколько способов, вы можете достичь этого. Элемент мат объект дает нам три метода округления, которые мы можем использовать:
The математика.круглый () наиболее часто используется, он возвращает значение округляется до ближайшего целого числа. То есть математика.этаж() который возвращает наибольшее целое число, меньшее или равное числу. Наконец у нас есть математика.ceil () функция, которая возвращает наименьшее целое, большее или равное количеству.
есть еще toFixed(), который возвращает строку, представляющую число с фиксированной точкой.
Ps.: Есть нет 2-й аргумент в математика.круглый () метод. Элемент toFixed() и не то есть конкретный, его внутри спецификация 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
кроме того, вы можете использовать parseInt() и parseFloat() для приведения переменной к определенному типу, в этом случае целочисленный и с плавающей точкой.
очень хорошее приближение для округления:
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; }
только в некоторых случаях, когда длина десятичной части числа очень длинная, это будет неверно.