Округление чисел до 2 цифр после запятой - PullRequest
66 голосов
/ 04 ноября 2010

Понятия не имею, как это сделать?Я добавляю запятые, результат, конечно, всегда число со слишком большим количеством цифр после запятойкто-нибудь?

Ответы [ 8 ]

91 голосов
/ 10 декабря 2013
  • toFixed() - метод преобразует число в строку, сохраняя указанное количество десятичных знаков. На самом деле оно не округляет число, оно усекает число.
  • Math.round(n) - округляет число до ближайшего целого числа. Таким образом поворачиваясь:

0,5 -> 1; 0,05 -> 0

так что, если вы хотите округлить, скажем, число 0,55555, только до второго десятичного знака; Вы можете сделать следующее (это пошаговая концепция):

  • 0.55555 * 100 = 55,555
  • Math.Round(55.555) -> 56.000
  • 56.000 / 100 = 0,56000
  • (0.56000).toFixed(2) -> 0,56

и это код:

(Math.round(number * 100)/100).toFixed(2);
80 голосов
/ 04 ноября 2010

РЕДАКТИРОВАТЬ 2 :

Используйте метод toFixed объекта Number следующим образом:

var num = Number(0.005) // The Number() only visualizes the type and is not needed
var roundedString = num.toFixed(2);
var rounded = Number(roudedString); // toFixed() returns a string (often suitable for printing already)

Он округляет 42.0054321 до 42.01

Округление от 0,005 до 0,01

Округление от -0,005 до -0,01 (таким образом, абсолютное значение увеличивается при округлении на границе 0,5)

jsFiddle пример

52 голосов
/ 02 сентября 2011

Это сработало для меня:

var new_number = float.toFixed(2);

Пример:

var my_float = 0.6666

my_float.toFixed(3) # => 0.667
10 голосов
/ 24 сентября 2015

Предыдущие ответы забыли снова напечатать вывод в виде числа.Есть несколько способов сделать это, в зависимости от ваших вкусов.

+my_float.toFixed(2)

Number(my_float.toFixed(2))

parseFloat(my_float.toFixed(2))
3 голосов
/ 13 декабря 2017

Хотя у нас здесь много ответов с множеством полезных предложений, каждый из них все же пропускает некоторые шаги.
Итак, вот решение complete , заключенное в маленькую функцию:

function roundToTwoDigitsAfterComma(floatNumber) {
    return parseFloat((Math.round(floatNumber * 100) / 100).toFixed(2));
}

На всякий случай, если вам интересно, как это работает:

  1. умножьте на 100, а затем выполните округление, чтобы сохранить точность до 2 цифр после запятой
  2. Разделите обратно на 100 и используйте toFixed(2), чтобы сохранить 2 цифры после запятая и выбрасывать другие ненужные части
  3. Преобразовать его обратно в плавающее, используя функцию parseFloat() как toFixed(2) вместо строки возвращает

Примечание: Если вы оставляете последние 2 цифры после запятой из-за работы с денежными значениями и проводите финансовые вычисления , имейте в виду, что не очень хорошая идея и вместо этого лучше использовать целочисленные значения.

3 голосов
/ 14 марта 2017

Это не совсем дружественно к процессору, но:

Math.round(number*100)/100

работает как положено.

1 голос
/ 06 октября 2017

используйте код ниже.

alert(+(Math.round(number + "e+2")  + "e-2"));
0 голосов
/ 27 февраля 2019

Я использую это:

function round(value, precision) {

	if(precision == 0)
		return Math.round(value);  	

	exp = 1;
	for(i=0;i<precision;i++)
		exp *= 10;

	return Math.round(value*exp)/exp;
}
...