12

Форматирование числа с обязательным отображением 2 знаков после запятой

7

Заголовок: Проблема с форматированием чисел для отображения с двумя десятичными знаками в JavaScript

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

Примеры:

число     отображение
------     -------
1          1.00
1.341      1.34
1.345      1.35

Я использовал следующий код:

parseFloat(num).toFixed(2);

Однако он отображает 1 как 1, а не как 1.00. Как мне добиться нужного результата?

5 ответ(ов)

17

Для округления числа до двух знаков после запятой вы можете использовать следующий код:

(Math.round(num * 100) / 100).toFixed(2);

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

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

var num1 = "1";
document.getElementById('num1').innerHTML = (Math.round(num1 * 100) / 100).toFixed(2);

var num2 = "1.341";
document.getElementById('num2').innerHTML = (Math.round(num2 * 100) / 100).toFixed(2);

var num3 = "1.345";
document.getElementById('num3').innerHTML = (Math.round(num3 * 100) / 100).toFixed(2);

Для этого примера и CSS для стилизации:

span {
    border: 1px solid #000;
    margin: 5px;
    padding: 5px;
}

И HTML-код:

<span id="num1"></span>
<span id="num2"></span>
<span id="num3"></span>

Обратите внимание, что этот код округляет число до двух знаков после запятой, поэтому, если вы введете 1.346, он вернет 1.35.

5

Функция toFixed() в JavaScript используется для форматирования числа с фиксированным количеством знаков после запятой. При этом следует учитывать, что округление может привести к неожиданным результатам в зависимости от значений, которые вы передаете. Давайте рассмотрим примеры:

Number(1).toFixed(2);         // 1.00
Number(1.341).toFixed(2);     // 1.34
Number(1.345).toFixed(2);     // 1.34  ПРИМЕЧАНИЕ: Смотрите комментарий Эндди ниже.
Number(1.3450001).toFixed(2); // 1.35

Обратите внимание, что число 1.345 округляется до 1.34, из-за особенностей представления чисел с плавающей точкой в JavaScript. Однако 1.3450001, имеющее больше знаков после запятой, округляется до 1.35.

Если вы хотите отобразить эти значения на веб-странице, вы можете использовать следующий код:

document.getElementById('line1').innerHTML = Number(1).toFixed(2);
document.getElementById('line2').innerHTML = Number(1.341).toFixed(2);
document.getElementById('line3').innerHTML = Number(1.345).toFixed(2);
document.getElementById('line4').innerHTML = Number(1.3450001).toFixed(2);

И вот соответствующий HTML код для вывода:

<span id="line1"></span>
<br/>
<span id="line2"></span>
<br/>
<span id="line3"></span>
<br/>
<span id="line4"></span>

Таким образом, на странице будут отображены значения, отформатированные с двумя знаками после запятой.

0

Я бы предложил использовать следующий код:

new Intl.NumberFormat('de-DE', { minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(num)

Таким образом, вы получите формат чисел в соответствии с локальными стандартами хранимой страны, и это гарантирует отображение ровно двух знаков после запятой (независимо от того, равно ли число 1 или 1.12345, в результате вы получите 1,00 и 1,12 соответственно).

В этом примере я использовал немецкую локализацию, потому что хотел видеть числа с разделителем тысяч. Вот некоторые варианты вывода:

1 => 1,00
1.12 => 1,12
1.1234 => 1,12
1234 => 1.234,00
1234.1234 => 1.234,12
0

В приведенном вами коде используется метод toPrecision, который форматирует число до заданного количества значащих цифр. Рассмотрим, что происходит в каждом из примеров:

var num = new Number(14.12);
console.log(num.toPrecision(2)); // выводит 14

Когда вы запрашиваете toPrecision(2), то функция возвращает 14, так как указывает на необходимость оставить 2 значащие цифры.

console.log(num.toPrecision(3)); // выводит 14.1

Здесь мы указываем 3 значащие цифры, и результат будет 14.1.

console.log(num.toPrecision(4)); // выводит 14.12

При требовании 4 значащих цифр метод вернет 14.12, так как это значение полностью соответствует указанному количеству значащих цифр.

console.log(num.toPrecision(5)); // выводит 14.120

Наконец, вызов с 5 значащими цифрами возвращает 14.120, что также соответствует требованиям.

Таким образом, метод toPrecision позволяет вам управлять количеством значащих цифр, представляющих число, что может быть полезно для форматирования данных в соответствии с вашими нуждами.

0

Используя Intl.NumberFormat, вы можете форматировать числа в соответствии с определёнными локальными стандартами. В приведённом вами примере создаётся экземпляр NumberFormat с локалью 'en-IN', которая соответствует индийскому формату.

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

var number = 123456.789;
console.log(new Intl.NumberFormat('en-IN', {
  maximumFractionDigits: 2
}).format(number));

В этом коде:

  • number — это число, которое вы хотите отформатировать.
  • new Intl.NumberFormat('en-IN', {...}) создаёт новый объект форматирования для индийского стиля.
  • Параметр maximumFractionDigits: 2 указывает, что необходимо отображать не более двух цифр после запятой.
  • Метод format(number) применяется к числу, возвращая его строковое представление в нужном формате.

В результате выполнения этого кода, на консоль будет выведено 1,23,456.79, что соответствует индийскому формату чисел с двумя десятичными знаками.

Не забудьте, что форматирование чисел может отличаться в зависимости от локали, так что вы всегда можете изменить параметр 'en-IN' на другой, чтобы получить нужный формат.

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