6

Как округлить число до одного знака после запятой в JavaScript?

7

Как правильно округлить число в JavaScript до одного знака после запятой (с правильным округлением)?

Я пробовал умножить на 10, округлить, затем разделить на 10, но в результате остаются два десятичных знака после целого числа.

5 ответ(ов)

11

Функция Math.round(num * 10) / 10 действительно работает для округления числа до одного десятичного знака. Привожу пример:

var number = 12.3456789;
var rounded = Math.round(number * 10) / 10;
// rounded равен 12.3

Если вам нужно оставить одну десятичную цифру, даже если это будет 0, то вы можете использовать метод toFixed:

var fixed = rounded.toFixed(1);
// 'fixed' всегда будет содержать одну десятичную цифру
// ЗАМЕТКА: .toFixed() возвращает строку!

// Для преобразования обратно в числовой формат
parseFloat(number.toFixed(2));
// 12.34
// Но это не сохранит запрашиваемые нулевые разряды

// Поэтому убедитесь, что этот шаг — последний перед выводом,
// и используйте числовой формат во время вычислений!

Опираясь на этот принцип, вот полезная функция для округления, которая принимает точность:

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

... использование ...

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"
1

Ваш код выглядит правильно, и он действительно должен округлять число до одного знака после запятой. В вашем случае, number.toFixed(1) вернет строку "123.5", что соответствует ожидаемому результату.

Вот как это работает:

  • Метод toFixed() форматирует число, округляя его до указанного количества десятичных знаков.
  • В вашем примере вы указали 1, что означает, что вы хотите получить число с одним знаком после запятой.

Таким образом, когда вы выполняете console.log(number.toFixed(1)), вы получите 123.5 в виде строки.

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

var number = 123.456;
var roundedNumber = parseFloat(number.toFixed(1));

console.log(roundedNumber); // 123.5

Надеюсь, это поможет! Если у вас есть другие вопросы, не стесняйтесь задавать.

0

Вы можете сделать следующее:

let n = 1.25;
let result = Number(n).toFixed(1);
// вывод строки: 1.3

Метод toFixed(1) округляет число до одного знака после запятой, возвращая строку. Обратите внимание, что результат будет "1.3" как строка, а не как число.

0

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

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

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

А вот еще один способ, использующий регулярные выражения:

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

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

0

Для округления числа до одного знака после запятой можно использовать метод Math.round(). В вашем примере переменная num содержит значение 34.7654. Чтобы округлить это число до одного знака после запятой, мы умножаем его на 10, применяем Math.round(), а затем делим на 10.

Вот ваш код с пояснениями:

var num = 34.7654;

// Умножаем на 10, округляем, затем делим на 10
num = Math.round(num * 10) / 10;

console.log(num); // Выводит: 34.8

Таким образом, результатом будет 34.8.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь