Learn JavaScript

toPrecision() - метод для форматирования числа по количеству значащих цифр в JavaScript

toPrecision() форматирует число по количеству значащих цифр.

Это значит, что метод учитывает не только дробную часть, а всю длину числа целиком.

Синтаксис

number.toPrecision(precision)
  • number - число
  • precision - сколько значащих цифр нужно оставить

Что делает toPrecision()

Метод округляет число до нужного количества значащих цифр и возвращает результат строкой.

console.log((123.456).toPrecision(4)); // "123.5"
console.log((123.456).toPrecision(2)); // "1.2e+2"

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

Что возвращает toPrecision()

toPrecision() возвращает не число, а строку.

const result = (12.345).toPrecision(3);

console.log(result);        // "12.3"
console.log(typeof result); // "string"

Если потом нужно именно число, его обычно получают отдельно:

const value = Number((12.345).toPrecision(3));

console.log(value);        // 12.3
console.log(typeof value); // "number"

Что такое значащие цифры

Значащие цифры считаются по всему числу, начиная с первой важной цифры.

console.log((0.004567).toPrecision(2)); // "0.0046"
console.log((12).toPrecision(4));       // "12.00"

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

Округление

toPrecision() округляет число, если цифр больше, чем нужно оставить.

console.log((1.23).toPrecision(1));   // "1"
console.log((123.456).toPrecision(5)); // "123.46"

То есть метод не просто обрезает число, а именно округляет его до нужной точности.

Экспоненциальная запись

Иногда toPrecision() возвращает строку в научной записи через e.

console.log((123456789).toPrecision(3)); // "1.23e+8"
console.log((0.0000001234).toPrecision(2)); // "1.2e-7"

Это нормальное поведение метода. Особенно часто оно встречается у очень больших или очень маленьких чисел.

toPrecision() и toFixed()

Эти методы часто путают, но они решают разные задачи.

console.log((123.456).toFixed(2));     // "123.46"
console.log((123.456).toPrecision(2)); // "1.2e+2"
  • toFixed() задаёт количество знаков после запятой
  • toPrecision() задаёт количество значащих цифр во всём числе

Если вам нужно ровно два знака после запятой, чаще подходит toFixed().

Если нужна определённая точность записи числа целиком, полезнее toPrecision().

Без аргумента

Если вызвать toPrecision() без аргумента, результат будет похож на toString().

console.log((123.456).toPrecision()); // "123.456"

Но на практике метод обычно используют именно с явным значением precision.

Число не меняется

toPrecision() не меняет исходное число. Он только возвращает новую строку.

const value = 123.456;
const formatted = value.toPrecision(4);

console.log(value);     // 123.456
console.log(formatted); // "123.5"

Допустимый диапазон precision

Аргумент precision должен быть в диапазоне от 1 до 100.

Если передать 0 или слишком большое число, будет RangeError.

(1.23).toPrecision(0); // RangeError

Когда это полезно

toPrecision() удобно использовать, когда:

  • важно показать число с определённой общей точностью
  • вы работаете с очень маленькими или очень большими значениями
  • нужна компактная запись результата

Пример:

const result = 0.004567;

console.log(result.toPrecision(2)); // "0.0046"

Частые ошибки

Думать, что precision - это знаки после запятой

console.log((123.456).toPrecision(2)); // "1.2e+2"

Здесь 2 означает две значащие цифры, а не две цифры после точки.

Думать, что метод возвращает число

const result = (12.345).toPrecision(3);

console.log(typeof result); // "string"

Если дальше нужно число, его надо получить отдельно.

Удивляться записи через e

console.log((123456789).toPrecision(3)); // "1.23e+8"

Для toPrecision() это нормальное и ожидаемое поведение.

Быстрая памятка

  • toPrecision() форматирует число по количеству значащих цифр
  • метод возвращает строку, а не число
  • он округляет значение
  • иногда результат записывается через e
  • precision должен быть от 1 до 100
  • это не то же самое, что toFixed()

Коротко

toPrecision() - это способ отформатировать число по общей точности, а не по количеству знаков после запятой. Главное, что стоит запомнить: метод возвращает строку и особенно полезен там, где важны значащие цифры, а не просто красивая дробная часть.