Я новичок в JavaScript и только что открыл toFixed()
и toPrecision()
круглые числа. Однако я не могу понять, какая разница между ними.
В чем разница между number.toFixed()
и number.toPrecision()
?
Я новичок в JavaScript и только что открыл toFixed()
и toPrecision()
круглые числа. Однако я не могу понять, какая разница между ними.
В чем разница между number.toFixed()
и number.toPrecision()
?
toFixed(n)
обеспечивает длину n
после десятичной точки; toPrecision(x)
обеспечивает x
общую длину.
Ссылка на w3schools: toFixed и toPrecision
ИЗМЕНИТЬ:
Некоторое время назад я узнал, что w3schools - это не совсем лучший источник, но я забыл об этом ответе, пока не увидел комментарий "кх", "восторженный". Ниже приведены дополнительные ссылки в Mozilla Doc Center дляtoFixed()
и дляtoPrecision()
. К счастью для всех нас, MDC и w3schools соглашаются друг с другом в этом случае.
Для полноты я должен упомянуть, что toFixed()
эквивалентен toFixed(0)
, а toPrecision()
просто возвращает исходный номер без форматирования.
Я считаю, что первое дает вам фиксированное количество десятичных знаков, тогда как второе дает вам фиксированное количество значащих цифр.
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: хорошие детали ".
Я думаю, что на этот вопрос лучше всего ответить.
Скажем, у вас есть следующие данные:
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
Это дает то, что вы ожидали. Нет никакой угадывающей работы, и нет округления.
Просто:
49.99.toFixed(5)
// → "49.99000"
49.99.toPrecision(5)
// → "49.990"
Примеры говорят четко:
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
При определенных обстоятельствах toPrecision()
будет возвращать экспоненциальную нотацию, тогда как toFixed()
не будет.
Например, мы рассматриваем переменную a как, var a = 123.45 a.toPrecision(6) Выходное значение равно 123.450 a.toFixed(6) Выходное значение равно 123.450000//6 цифр после десятичной точки