Разница между toFixed() и toPrecision()?

Я новичок в JavaScript и только что открыл toFixed() и toPrecision() круглые числа. Однако я не могу понять, какая разница между ними.

В чем разница между number.toFixed() и number.toPrecision()?

Ответ 1

toFixed(n) обеспечивает длину n после десятичной точки; toPrecision(x) обеспечивает x общую длину.

Ссылка на w3schools: toFixed и toPrecision

ИЗМЕНИТЬ:
Некоторое время назад я узнал, что w3schools - это не совсем лучший источник, но я забыл об этом ответе, пока не увидел комментарий "кх", "восторженный". Ниже приведены дополнительные ссылки в Mozilla Doc Center для toFixed() и для toPrecision(). К счастью для всех нас, MDC и w3schools соглашаются друг с другом в этом случае.

Для полноты я должен упомянуть, что toFixed() эквивалентен toFixed(0), а toPrecision() просто возвращает исходный номер без форматирования.

Ответ 2

Я считаю, что первое дает вам фиксированное количество десятичных знаков, тогда как второе дает вам фиксированное количество значащих цифр.

Math.PI.toFixed(2); // "3.14"
Math.PI.toPrecision(2); // "3.1"

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

(Math.PI * 10).toPrecision(2); // "31"
(Math.PI * 100).toPrecision(2); // "3.1e+2"

РЕДАКТИРОВАТЬ: Да, и если вы новичок в JavaScript, я настоятельно рекомендую книгу Дугласа Крокфорда " JavaScript: хорошие детали ".

Ответ 3

Я думаю, что на этот вопрос лучше всего ответить.

Скажем, у вас есть следующие данные:

var products = [
  {
    "title": "Really Nice Pen",
    "price": 150
  },
  {
    "title": "Golf Shirt",
    "price": 49.99
  },
  {
    "title": "My Car",
    "price": 1234.56
  }
]

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

document.write("The price of " + products[0].title + " is $" + products[0].price.toPrecision(5));

The price of Really Nice Pen is $150.00

Выглядит хорошо, поэтому вы можете подумать, что это будет работать и для других продуктов:

document.write("The price of " + products[1].title + " is $" + products[2].price.toPrecision(5));
document.write("The price of " + products[2].title + " is $" + products[2].price.toPrecision(5));

The price of Golf Shirt is $49.990
The price of My Car is $1234.6

Не так хорошо. Мы можем исправить это, изменив количество значимых цифр для каждого продукта, но если мы итерируем по массиву продуктов, которые могут быть сложными. Вместо этого используйте toFixed:

document.write("The price of " + products[0].title + " is $" + products[0].price.toFixed(2));
document.write("The price of " + products[1].title + " is $" + products[2].price.toFixed(2));
document.write("The price of " + products[2].title + " is $" + products[2].price.toFixed(2));

The price of Really Nice Pen is $150.00
The price of Golf Shirt is $49.99
The price of My Car is $1234.56

Это дает то, что вы ожидали. Нет никакой угадывающей работы, и нет округления.

Ответ 4

Просто:

49.99.toFixed(5)
// → "49.99000"

49.99.toPrecision(5)
// → "49.990"

Ответ 5

Примеры говорят четко:

var A = 123.456789;

A.toFixed()      // 123
A.toFixed(0)     // 123
A.toFixed(1)     // 123.5
A.toFixed(2)     // 123.46
A.toFixed(3)     // 123.457
A.toFixed(4)     // 123.4568
A.toFixed(5)     // 123.45679
A.toFixed(6)     // 123.456789
A.toFixed(7)     // 123.4567890
A.toFixed(8)     // 123.45678900
A.toFixed(9)     // 123.456789000
A.toFixed(10)    // 123.4567890000
A.toFixed(11)    // 123.45678900000

A.toPrecision()      // 123.456789 
A.toPrecision(0)     // --- ERROR --- 
A.toPrecision(1)     // 1e+2
A.toPrecision(2)     // 1.2e+2
A.toPrecision(3)     // 123
A.toPrecision(4)     // 123.5
A.toPrecision(5)     // 123.46
A.toPrecision(6)     // 123.457
A.toPrecision(7)     // 123.4568
A.toPrecision(8)     // 123.45679
A.toPrecision(9)     // 123.456789
A.toPrecision(10)    // 123.4567890
A.toPrecision(11)    // 123.45678900

Ответ 6

При определенных обстоятельствах toPrecision() будет возвращать экспоненциальную нотацию, тогда как toFixed() не будет.

Ответ 7

Например, мы рассматриваем переменную a как, var a = 123.45 a.toPrecision(6) Выходное значение равно 123.450 a.toFixed(6) Выходное значение равно 123.450000//6 цифр после десятичной точки