Как округлить до 1 десятичного знака в Javascript? - PullRequest
313 голосов
/ 08 сентября 2011

Можете ли вы округлить число в javascript до 1 символа после десятичной точки (правильно округлено)?

Я пробовал * 10, раунд, / 10, но он оставляет два десятичных знака в конце int.

Ответы [ 20 ]

609 голосов
/ 08 сентября 2011

Math.round( num * 10) / 10 работает, вот пример ...

var number = 12.3456789;
var rounded = Math.round( number * 10 ) / 10;
// rounded is 12.3

, если вы хотите, чтобы он занимал один десятичный знак, даже если это будет 0, добавьте ...

var fixed = rounded.toFixed(1);
// fixed is always to 1dp
// BUT: returns string!

// to get it back to number format
parseFloat( number.toFixed(2) )
// 12.34
// but that will not retain any trailing zeros

// so, just make sure it is the last step before output,
// and use a number format during calculations!

РЕДАКТИРОВАТЬ: добавить раунд с функцией точности ...

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

function round(value, precision) {
    var multiplier = Math.pow(10, precision || 0);
    return Math.round(value * multiplier) / multiplier;
}

... using ...

round(12345.6789, 2) // 12345.68
round(12345.6789, 1) // 12345.7

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

round(12345.6789) // 12346

... и может использоватьсяокруглять до ближайших 10 или 100 и т. д. *

round(12345.6789, -1) // 12350
round(12345.6789, -2) // 12300

... и корректно обрабатывать отрицательные числа ...

round(-123.45, 1) // -123.4
round(123.45, 1) // 123.5

... и может комбинироваться с toFixedпоследовательно форматировать как строку ...

round(456.7, 2).toFixed(2) // "456.70"
85 голосов
/ 08 сентября 2011
var number = 123.456;

console.log(number.toFixed(1)); // should round to 123.5
23 голосов
/ 03 октября 2012

Если вы используете Math.round(5.01), вы получите 5 вместо 5.0.

При использовании toFixed вы сталкиваетесь с округлением выпусков .

Если вы хотите лучшее из обоих миров, объедините два:

(Math.round(5.01 * 10) / 10).toFixed(1)

Возможно, вы захотите создать для этого функцию:

function roundedToFixed(_float, _digits){
  var rounder = Math.pow(10, _digits);
  return (Math.round(_float * rounder) / rounder).toFixed(_digits);
}
22 голосов
/ 03 марта 2016

lodash имеет round метод:

_.round(4.006);
// => 4

_.round(4.006, 2);
// => 4.01

_.round(4060, -2);
// => 4100

Docs .

Источник .

11 голосов
/ 08 сентября 2011

Я голосую за toFixed(), но для записи вот еще один способ, который использует сдвиг битов для приведения числа к целому числу.Таким образом, он всегда округляется до нуля (для положительных чисел - вниз, для отрицательных - вверх).

var rounded = ((num * 10) << 0) * 0.1;

Но, эй, поскольку вызовов функций нет, он быстро работает.:)

А вот тот, который использует сопоставление строк:

var rounded = (num + '').replace(/(^.*?\d+)(\.\d)?.*/, '$1$2');

Я не рекомендую использовать строковый вариант, просто скажите.

6 голосов
/ 15 июня 2013

Попробуйте с этим:

var original=28.453

// 1.- round "original" to two decimals
var result = Math.round (original * 100) / 100  //returns 28.45

// 2.- round "original" to 1 decimal
var result = Math.round (original * 10) / 10  //returns 28.5

// 3.- round 8.111111 to 3 decimals
var result = Math.round (8.111111 * 1000) / 1000  //returns 8.111

менее сложным и простым в реализации ...

с этим, вы можете создать функцию для:

function RoundAndFix (n, d) {
    var m = Math.pow (10, d);
    return Math.round (n * m) / m;
}

function RoundAndFix (n, d) {
    var m = Math.pow (10, d);
    return Math.round (n * m) / m;
}
console.log (RoundAndFix(8.111111, 3));

РЕДАКТИРОВАТЬ : см. Это Как округлить с помощью ROUND HALF UP.Режим округления, который большинство из нас учили в начальной школе

4 голосов
/ 12 февраля 2014

x = число, n = десятичные разряды:

function round(x, n) {
    return Math.round(x * Math.pow(10, n)) / Math.pow(10, n)
}
3 голосов
/ 29 октября 2015

Чтобы завершить лучший ответ:

var round = function ( number, precision )
{
    precision = precision || 0;
    return parseFloat( parseFloat( number ).toFixed( precision ) );
}

Номер входного параметра может "не" всегда быть числом, в этом случае .toFixed не существует.

3 голосов
/ 08 сентября 2011
var num = 34.7654;

num = Math.round(num * 10) / 10;

console.log(num); // Logs: 34.8
2 голосов
/ 24 января 2018

ES 6 Версия принятого ответа:

function round(value, precision) {
    const multiplier = 10 ** (precision || 0);
    return Math.round(value * multiplier) / multiplier;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...