JavaScript метод Number.prototype.toPrecision()

Определение и применение

JavaScript метод toPrecision() в зависимости от количества заданных значащих разрядов числа возвращает строку, представляющую число (объект Number) в записи с фиксированной запятой, или в экспоненциальной форме записи, округленное до точных значащих цифр.

Проверьте поведение в редактируемом примере.

Поддержка браузерами

Спецификация: ecma262

Поддерживается во всех основных браузерах с 2015 года.

Показать браузеры
Совместимостьjavascript.builtins.Number.toPrecision
ВозможностьКомпьютерыМобильные
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung BrowserWebView AndroidWebView on iOS
toPrecision✓1✓12✓1✓7✓2✓18✓4✓10.1✓1✓1.0✓4.4✓1

поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31

JavaScript синтаксис

JavaScript
// возвращается строковое представление числа без форматирования
num.toPrecision();

// возвращает строку с заданным числом значащих цифр
num.toPrecision( precision );

Спецификация

ECMAScript: Number.prototype.toPrecision()

Значения параметров

Number: справочные сведения
Параметр Описание
precision Целое число, которое определяет количество значащих разрядов числа. Числовое значение должно находиться в диапазоне от 1 до 100 включительно. Необязательный параметр.
Если значение параметра precision не указано или равно undefined, то используется то же представление, что у метода Number.prototype.toString() и возвращается строковое представление числа без форматирования. Если значение параметра precision является нецелым числовым значением, то оно будет усечено в сторону нуля до целого числа.
Для чисел в экспоненциальной форме записи возвращается число знаков после запятой равное значению параметра precision - 1, a для чисел в записи с фиксированной запятой возвращается число значащих цифр, равное значению precision.

Исключения

Number: справочные сведения
Тип исключения Описание
RangeError Возникает в том случае, если параметр precision не находится в диапазоне от 1 до 100 (включительно).
TypeError Возникает в том случае, если метод вызывается для значения, которое не является числовым примитивом или объектом-обёрткой Number.

Возвращаемое значение и особенности

Возвращает строку с заданным числом значащих цифр, а не строку фиксированной длины. Экспоненциальная форма используется, если десятичный показатель степени меньше -6 либо не меньше precision. Для NaN и бесконечностей возвращается соответствующая строка без проверки диапазона precision.

Примеры, попробуйте сами

Как число значащих цифр меняет представление числа

Измените число и precision; сравните обычную и экспоненциальную запись.

index.html
HTML
<p>Результат выполнения выводится в консоль.</p>
main.js
JavaScript
var num = 12345.6789 // инициализируем числовую переменную

try {
    console.log(num.toPrecision())
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "12345.6789"
try {
    console.log(num.toPrecision(3))
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "1.23e+4"
try {
    console.log(num.toPrecision(2))
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "1.2e+4"
try {
    console.log(num.toPrecision(1.1))
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "1e+4"
try {
    console.log(num.toPrecision(1.9))
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "1e+4"
try {
    console.log(num.toPrecision(10))
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "12345.67890"
try {
    console.log(num.toPrecision(9))
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "12345.6789"
try {
    console.log(num.toPrecision(7))
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "12345.68"
try {
    console.log(num.toPrecision(5))
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "12346"
try {
    console.log(num.toPrecision(-1))
} catch (error) {
    console.log(error.name)
} // RangeError
try {
    console.log(num.toPrecision(0))
} catch (error) {
    console.log(error.name)
} // RangeError
try {
    console.log(num.toPrecision(101))
} catch (error) {
    console.log(error.name)
} // RangeError

var num2 = 123456 // инициализируем числовую переменную

try {
    console.log(num2.toPrecision())
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "123456"
try {
    console.log(num2.toPrecision(10))
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "123456.0000"
try {
    console.log(num2.toPrecision(5))
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "1.2346e+5"
try {
    console.log(num2.toPrecision(3))
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "1.23e+5"
try {
    console.log(num2.toPrecision(2))
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "1.2e+5"
try {
    console.log(num2.toPrecision(1.1))
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "1e+5"
try {
    console.log(num2.toPrecision(1.9))
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "1e+5"
try {
    console.log(num2.toPrecision(true + true))
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "1.2e+5"

var str = '12345.6789' // инициализируем строковую переменную
try {
    console.log(str.toPrecision())
} catch (error) {
    console.log(error.name)
} // TypeError

try {
    console.log((123.45).toPrecision(3))
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "123"
// 123.toPrecision(2) — SyntaxError: точка читается как дробная часть; пишите (123).toPrecision(2) или 123..toPrecision(2)
try {
    console.log((123).toPrecision(4))
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "123.0"

try {
    console.log((1.11e1).toPrecision(3))
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "11.1"
try {
    console.log((1.11e1).toPrecision(2))
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "11"
try {
    console.log((1.11e-1).toPrecision(3))
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "0.111"
try {
    console.log((1.11e-1).toPrecision(2))
} catch (error) {
    console.log(error.name)
} // возвращаемое значение "0.11"

console.log('Длина строки при 100 значащих цифрах:', (1).toPrecision(100).length)
console.log('Бесконечность:', Infinity.toPrecision(101))