JavaScript метод Number.prototype.toPrecision()
Определение и применение
JavaScript метод toPrecision() в зависимости от количества заданных значащих разрядов числа возвращает
строку, представляющую число (объект Number) в записи с фиксированной запятой, или в экспоненциальной
форме записи, округленное до точных значащих цифр.
Проверьте поведение в редактируемом примере.
Поддержка браузерами
Спецификация: ecma262
Поддерживается во всех основных браузерах с 2015 года.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
toPrecision | 1 | 12 | 1 | 7 | 2 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 | 1 |
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
JavaScript синтаксис
// возвращается строковое представление числа без форматирования
num.toPrecision();
// возвращает строку с заданным числом значащих цифр
num.toPrecision( precision );
Спецификация
ECMAScript: Number.prototype.toPrecision()
Значения параметров
| Параметр | Описание |
|---|---|
precision |
Целое число, которое определяет количество значащих разрядов числа. Числовое значение должно находиться в
диапазоне от 1 до 100 включительно. Необязательный параметр. Если значение параметра precision не указано или равно undefined, то используется то
же представление, что у метода
Number.prototype.toString()
и возвращается строковое представление числа без форматирования. Если значение параметра
precision является нецелым числовым значением, то оно будет усечено в сторону нуля до целого
числа.Для чисел в экспоненциальной форме записи возвращается число знаков после запятой равное значению параметра precision - 1, a для чисел в записи с фиксированной запятой возвращается число значащих цифр,
равное значению precision.
|
Исключения
| Тип исключения | Описание |
|---|---|
RangeError |
Возникает в том случае, если параметр precision не находится в диапазоне от 1 до 100
(включительно).
|
TypeError |
Возникает в том случае, если метод вызывается для значения, которое не является числовым примитивом или
объектом-обёрткой Number.
|
Возвращаемое значение и особенности
Возвращает строку с заданным числом значащих цифр, а не строку фиксированной длины. Экспоненциальная форма
используется, если десятичный показатель степени меньше -6 либо не меньше precision. Для
NaN и бесконечностей возвращается соответствующая строка без проверки диапазона precision.
Примеры, попробуйте сами
Как число значащих цифр меняет представление числа
Измените число и precision; сравните обычную и экспоненциальную запись.
index.html
<p>Результат выполнения выводится в консоль.</p>
main.js
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))