Как мне округлить число в JavaScript? - PullRequest
65 голосов
/ 29 октября 2008

Работая над проектом, я наткнулся на JS-скрипт, созданный бывшим сотрудником, который в основном создает отчет в виде

Name : Value
Name2 : Value2

и т.д.

Проблема состоит в том, что значения иногда могут быть числами с плавающей запятой (с разной точностью), целыми числами или даже в форме 2.20011E+17. То, что я хочу вывести - это чистые целые числа. Я не знаю много JavaScript, хотя. Как мне написать метод, который берет эти иногда плавающие числа и делает их целыми числами?

Ответы [ 8 ]

103 голосов
/ 26 января 2009

Если вам нужно округлить до определенного числа цифр, используйте следующую функцию

function roundNumber(number, digits) {
            var multiple = Math.pow(10, digits);
            var rndedNum = Math.round(number * multiple) / multiple;
            return rndedNum;
        }
51 голосов
/ 29 октября 2008

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

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
30 голосов
/ 29 октября 2008

Согласно спецификации ECMAScript числа в JavaScript представлены только 64-разрядным форматом двойной точности IEEE 754. Следовательно, в JavaScript нет целочисленного типа.

Что касается округления этих чисел, есть несколько способов, которыми вы можете достичь этого. Объект Math дает нам три метода округления, которые мы можем использовать:

Чаще всего используется Math.round () , оно возвращает значение, округленное до ближайшего целого числа. Затем есть Math.floor () , который возвращает наибольшее целое число, меньшее или равное числу. Наконец, у нас есть функция Math.ceil () , которая возвращает наименьшее целое число, большее или равное числу.

Существует также toFixed () , который возвращает строку, представляющую число с использованием записи с фиксированной точкой.

Ps .: В методе Math.round () есть нет второго аргумента . toFixed () является не специфичным для IE , его в пределах в спецификации ECMAScript также

25 голосов
/ 04 мая 2012

Вот способ использовать 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
20 голосов
/ 07 мая 2012

Вы также можете использовать toFixed(x) или toPrecision(x), где x - количество цифр.

Оба эти метода поддерживаются во всех основных браузерах

16 голосов
/ 29 октября 2008

Вы можете использовать Math.round () для округления чисел до ближайшего целого числа.

Math.round(532.24) => 532

Кроме того, вы можете использовать parseInt () и parseFloat () для приведения переменной к определенному типу, в данном случае целому и с плавающей запятой.

0 голосов
/ 16 мая 2014

Math.floor (19.5) = 19 также должно работать.

0 голосов
/ 11 сентября 2013

Очень хорошее приближение для округления:

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;
}

Только в некоторых случаях, когда длина десятичной части числа очень велика, она будет неправильной.

...