Ограничить количество чисел, показанных после десятичного знака в JavaScript - PullRequest
25 голосов
/ 23 ноября 2010

Хей, у меня есть такие поплавки

4.3455
2.768
3.67

и я хочу отобразить их вот так

4.34
2.76
3.67

Я не хочу округлять число вверх или вниз, просто ограничьте количество чисел, показанных после десятичного знака, до 2.

Ответы [ 6 ]

44 голосов
/ 23 ноября 2010

Вы ищете toFixed:

var x = 4.3455;
alert(x.toFixed(2)); // alerts 4.35 -- not what you wanted!

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

var x = 4.3455;
x = Math.floor(x * 100) / 100;
alert(x.toFixed(2)); // alerts 4.34
7 голосов
/ 01 декабря 2014

Как ответил T.J, метод toFixed при необходимости выполнит соответствующее округление. Это также добавит конечные нули, что не всегда идеально.

(4.55555).toFixed(2);
//-> "4.56"

(4).toFixed(2);
//-> "4.00"

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

+parseFloat((4.55555).toFixed(2));
//-> 4.56

+parseFloat((4).toFixed(2));
//-> 4
6 голосов
/ 23 ноября 2010

Если вы не хотите округлять до 2 знаков после запятой, используйте toFixed(), чтобы округлить до n знаков после запятой и отрубите все, кроме 2:

var num = 4.3455.toFixed(20);
alert(num.slice(0, -18));
//-> 4.34

Обратите внимание, что это имеет небольшую обратную сторону округления, когда число десятичных разрядов, переданных в toFixed(), меньше, чем количество десятичных разрядов фактического числа, переданного, и эти десятичные разряды являются большими числами. Например, (4.99999999999).toFixed(10) даст вам 5.0000000000. Тем не менее, это не проблема, если вы можете убедиться, что количество десятичных разрядов будет меньше, чем число, переданное toFixed(). Это, однако, делает решение @ TJ более надежным.

5 голосов
/ 07 октября 2017

Внимание! В некоторых случаях не удается принять текущее решение, например, с 4.27 ошибочно возвращает 4.26.

Вот общее решение , которое работает всегда.

(Может быть, я должен поставить это как комментарий, но на момент написания этой статьи у меня нет необходимой репутации)

1 голос
/ 10 ноября 2018

Хорошие новости всем! Со временем есть альтернатива: toLocaleString ()

Хотя это не совсем подходит для округления, есть несколько полезных опций аргументов.

minimumIntegerDigits

Минимальное количество целых цифр для использования. Возможные значения от 1> до 21; по умолчанию 1.

minimumFractionDigits

Минимальное количество цифр дроби для использования.

Возможные значения от 0> до 20; по умолчанию для простого числа и процента форматирования 0; т

По умолчанию для форматирования валюты используется номер младшей единицы цифры, представленные в списке кодов валют ISO 4217 (2, если список не предоставляет эту информацию).

maximumFractionDigits

Максимальное количество цифр дроби для использования.

Возможные значения от 0> до 20; по умолчанию для обычного числового форматирования больше, чем минимальное число фракций и 3

Значением по умолчанию для форматирования валюты является большее из минимальных дробных чисел и количества младших единиц цифры, представленные в списке кодов валют ISO 4217 (2, если список не предоставляет эту информацию); по умолчанию для процентного форматирования больше минимального значения FractionDigits и равно 0.

minimumSignificantDigits

Минимальное количество значащих цифр для использования. Возможные значения от 1 до 21; по умолчанию 1.

maximumSignificantDigits

Максимальное количество значащих цифр для использования. Возможные значения от 1 до 21; по умолчанию установлено значение 21.

Пример использования:

var bigNum = 8884858284485 * 4542825114616565
var smallNum = 88885 / 4545114616565

console.log(bigNum) // Output scientific

console.log(smallNum) // Output scientific

// String
console.log(
  bigNum.toLocaleString('fullwide', {useGrouping:false})
) 

// Return a string, rounded at 12 decimals
console.log(
  smallNum.toLocaleString('fullwide', {maximumFractionDigits:12})
)

// Return an Integer, rounded as need, js will convert it back to scientific!
console.log(
  +smallNum.toLocaleString('fullwide', {maximumFractionDigits:12})
)

// Return same Integer, don't use parseInt for precision!
console.log(
  parseInt(smallNum.toLocaleString('fullwide', {maximumFractionDigits:12}))
)

Но это не соответствует вопросу, это округление:

function cutDecimals(number,decimals){
  return number.toLocaleString('fullwide', {maximumFractionDigits:decimals})
}

console.log(
  cutDecimals(4.3455,2),
  cutDecimals(2.768,2),
  cutDecimals(3.67,2)
)

1073 *

1 голос
/ 18 мая 2015

Используйте toPrecision:)

var y = 67537653.76828732668326;
y = (String(y).indexOf('.') !== -1) ? +y.toPrecision(String(y).indexOf('.') + 2) : +y.toFixed(2);
// => 67537653.76

Число 2 во второй строке определяет количество знаков после запятой, этот подход возвращает число, если вы хотите, чтобы строка удалила оператор "+".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...