Сено, у меня есть такие поплавки, как эти
4.3455
2.768
3.67
и я хочу их отобразить как
4.34
2.76
3.67
Я не хочу округлять число вверх или вниз, просто ограничьте количество чисел, показанных после десятичной точки, на 2.
Сено, у меня есть такие поплавки, как эти
4.3455
2.768
3.67
и я хочу их отобразить как
4.34
2.76
3.67
Я не хочу округлять число вверх или вниз, просто ограничьте количество чисел, показанных после десятичной точки, на 2.
Вы ищете 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
Если вы не хотите округлять до двух знаков после запятой, используйте toFixed()
для округления до десяти знаков после запятой и отрубите все это, но 2:
var num = 4.3455.toFixed(20);
alert(num.slice(0, -18));
//-> 4.34
Обратите внимание, что это имеет небольшой недостаток округления, когда число десятичных знаков, прошедших до toFixed()
, меньше числа десятичных знаков фактического числа, прошедшего в, и эти десятичные числа являются большими числами. Например, (4.99999999999).toFixed(10)
даст вам 5.0000000000
. Однако это не проблема, если вы можете гарантировать, что число десятичных знаков будет меньше, чем число, переданное в toFixed()
. Однако он делает решение @TJ более надежным.
Как ответил 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
Предупреждение! В некоторых случаях принятое решение не выполняется, например. с 4.27 он ошибочно возвращает 4.26.
Вот общее решение, которое работает всегда.
(Может быть, я должен поставить это как комментарий, но на момент написания этой статьи у меня нет необходимой репутации)
Использовать toPrecision:)
var y = 67537653.76828732668326;
y = (String(y).indexOf('.') !== -1) ? +y.toPrecision(String(y).indexOf('.') + 2) : +y.toFixed(2);
// => 67537653.76
2 во второй строке определяет количество десятичных знаков, этот подход возвращает число, если вы хотите, чтобы строка удаляла оператор "+".