Как округлить число в JavaScript?

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

Name : Value
Name2 : Value2

и т.п.

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

Я также рекомендую вызвать Math.floor () раньше, чтобы он не округлялся, если это то, что вы ищете.

Archmede 26.08.2017 01:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
65
1
92 845
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

Math.round(532.24) => 532

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

Итак, Math.round (532.24,0) = 532?

Ace 29.10.2008 12:28

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

Aron Rotteveel 29.10.2008 13:56

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

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

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

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

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

Хорошее объяснение и мое плохое за второй аргумент; Я отредактирую свой ответ, чтобы отразить это.

Aron Rotteveel 29.10.2008 13:52

Вам просто нужно обратиться к спецификации =]

Pablo Cabrera 29.10.2008 14:02
Ответ принят как подходящий

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

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

Один вкладыш точно такой же, как и 4 вкладыша :)

Juan Mendes 26.01.2012 08:56

Фактически однострочник - «Math.round (number)». Целый бизнес по литью типов не нужен. В JavaScript строки при необходимости автоматически переводятся в числа.

AaronAsAChimp 23.12.2012 01:48

@AaronAsAChimp Я не могу согласиться - если строка включает символы, отличные от цифр и . или E+, то Math.round вернет NaN.

matewka 28.12.2012 15:56

Напротив, функция Number использует тот же алгоритм преобразования чисел, что и принуждение. Алгоритм (определенный в разделе 9.3.1 3-го издания ECMA-262) обрабатывает большое количество форматов. В основном все, что было бы допустимым числом, включая десятичные дроби, обозначения экспоненты и шестнадцатеричные числа. (серьезно '0xFF' == 255)

AaronAsAChimp 29.12.2012 19:42

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

function roundNumber(number, digits) {
            var multiple = Math.pow(10, digits);
            var rndedNum = Math.round(number * multiple) / multiple;
            return rndedNum;
        }

Возможно, лучше использовать .toFixed(), добавленный в JavaScript 1.5.

Denilson Sá Maia 05.10.2013 20:28

Обратите внимание, что toFixed () выводит строку. (0.1 + 0.2).toFixed(2) возвращает строку «0,30». Но вы можете вернуть его в число, добавив "+". +(0.1 + 0.2).toFixed(2) дает число 0,3

Chris 04.12.2015 01:18

если вы используете lodash, вы можете круглая функция lodash: _.round(number, precision)

qwertz 19.09.2017 19:23

На самом деле я думаю, что то, что предлагает @qwertz, - лучший ответ, который вы можете получить на SO.

greenskin 04.10.2017 16:37

Вот способ использования 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), где Икс - количество цифр.

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

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

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

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

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

Этаж! = Круглый. floor(19.5) == 19, но round(19.5) = 20.

Bernhard Barker 16.05.2014 03:11

Другие вопросы по теме