ToPrecision: примеры (JAVASCRIPT)

Метод toPrecision для форматирования чисел в JavaScript
Раздел: Числа, Форматирование
toPrecision(precision?): string

Описание функции toPrecision

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

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

Синтаксис: number.toPrecision([precision])

Аргументы:

  • precision (необязательный) - целое число в диапазоне от 1 до 100, определяющее количество значащих цифр. Если аргумент опущен, метод возвращает строковое представление числа так, как если бы был вызван метод toString().

Возвращаемое значение:

  • Строка, представляющая число в указанной точности, при необходимости в экспоненциальной или фиксированной записи.
  • Если аргумент precision находится вне диапазона 1-100, генерируется исключение RangeError.
  • Если число имеет больше значащих цифр, чем указано в precision, оно будет округлено.

Базовые примеры использования

Примеры с различными параметрами:

1. Использование без аргумента:

let num = 123.456;
console.log(num.toPrecision());
"123.456"

2. Указание точности меньше количества целых цифр:

let num = 123.456;
console.log(num.toPrecision(2));
"1.2e+2"

3. Указание точности больше количества цифр:

let num = 12.34;
console.log(num.toPrecision(5));
"12.340"

4. Работа с очень большими числами:

console.log((123456789).toPrecision(5));
"1.2346e+8"

5. Работа с очень маленькими числами:

console.log((0.000123456).toPrecision(3));
"0.000123"

Похожие функции в JavaScript

JavaScript предоставляет несколько методов для форматирования чисел:

  • toFixed(digits) - возвращает строку с указанным количеством цифр после десятичной точки. Отличие от toPrecision в том, что toFixed работает с дробной частью, а не со всеми значащими цифрами.
  • toExponential(fractionDigits) - возвращает строку, представляющую число в экспоненциальной записи с указанным количеством цифр после десятичной точки.
  • Number.prototype.toString([radix]) - возвращает строковое представление числа в указанной системе счисления.

Когда что использовать: toPrecision применяется при необходимости контроля над количеством значащих цифр. toFixed лучше подходит для финансовых расчетов с фиксированным количеством знаков после запятой. toExponential полезен при работе с очень большими или очень маленькими числами.

Альтернативы в других языках программирования

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

Python: используется форматирование строк или функция round(), но они работают иначе.

num = 123.456
print("{:.2}".format(num))  # 2 значащие цифры
print(round(num, 2))  # 2 знака после запятой
1.2e+02
123.46

PHP: функция number_format() работает с десятичными знаками, а не со значащими цифрами.

$num = 123.456;
echo number_format($num, 2);
123.46

C: для вывода с заданной точностью используются спецификаторы формата printf.

#include 
int main() {
    double num = 123.456;
    printf("%.2g", num);  // 2 значащие цифры
    return 0;
}
1.2e+02

MySQL: функция FORMAT() аналогична PHP number_format().

SELECT FORMAT(123.456, 2);
123.46

Типичные ошибки

1. Передача нечислового значения: метод должен вызываться на числах.

"123.456".toPrecision(3);
TypeError: "123.456".toPrecision is not a function

2. Диапазон аргумента: значение precision должно быть между 1 и 100.

(123.456).toPrecision(0);
RangeError: toPrecision() argument must be between 1 and 100

3. Неявное преобразование: метод возвращает строку, а не число.

let result = (123.456).toPrecision(4);
console.log(typeof result);
console.log(result + 10);
string
"123.510"

4. Округление: метод использует округление, что может привести к неожиданным результатам.

console.log((0.95).toPrecision(1));
"1"

Изменения в последних версиях

Метод toPrecision() не претерпел существенных изменений в последних версиях ECMAScript. Однако, стоит отметить:

  • В ECMAScript 2015 (ES6) метод был стандартизирован и включен в спецификацию, но его поведение не изменилось.
  • В современных браузерах и средах выполнения ошибка RangeError теперь выдается при значении precision вне диапазона 1-100, тогда как в очень старых реализациях это могло приводить к неопределенному поведению.
  • Незначительные изменения могли произойти в алгоритмах округления в различных движках JavaScript, но они не задокументированы как изменения спецификации.

Расширенные примеры использования

1. Динамическое определение точности: точность может вычисляться во время выполнения.

Пример javascript
function formatWithDynamicPrecision(num, maxDigits) {
    let precision = Math.min(maxDigits, num.toString().replace('.', '').length);
    return num.toPrecision(precision);
}
console.log(formatWithDynamicPrecision(123.456, 5));
console.log(formatWithDynamicPrecision(123.456, 2));
"123.46"
"1.2e+2"

2. Сравнение округления: демонстрация различий между toPrecision и toFixed.

Пример javascript
let num = 123.456;
console.log(`toPrecision(4): ${num.toPrecision(4)}`);
console.log(`toFixed(2): ${num.toFixed(2)}`);
toPrecision(4): 123.5
toFixed(2): 123.46

3. Обработка граничных значений: работа с очень маленькими и большими числами.

Пример javascript
console.log((0.000000123456).toPrecision(3));
console.log((999999999999).toPrecision(6));
"1.23e-7"
"1.00000e+12"

4. Цепочка вызовов: результат toPrecision - строка, поэтому числовые методы к нему неприменимы.

Пример javascript
let num = 12.345;
let result = parseFloat(num.toPrecision(3));
console.log(result.toFixed(1));
"12.3"

5. Научные вычисления: форматирование результатов научных расчетов.

Пример javascript
let avogadro = 6.02214076e23;
console.log(`Постоянная Авогадро: ${avogadro.toPrecision(5)}`);
Постоянная Авогадро: 6.0221e+23

6. Работа с целыми числами: поведение метода с целыми значениями.

Пример javascript
console.log((42).toPrecision(5));
console.log((100).toPrecision(1));
"42.000"
"1e+2"

7. Отрицательные числа: обработка отрицательных значений.

Пример javascript
console.log((-123.456).toPrecision(4));
console.log((-0.00123456).toPrecision(2));
"-123.5"
"-0.0012"

JS toPrecision function comments

En
ToPrecision Returns a string representing the number to a specified precision