Разница между toFixed() и toPrecision()?
Я новичок в JavaScript и только что обнаружил toFixed() и toPrecision() для округления чисел. Однако я не могу понять, в чем разница между ними.
В чем разница между number.toFixed() и number.toPrecision()?
7 ответов:
toFixed(n)предоставляетnдлина после запятой;toPrecision(x)предоставляетxобщая длина.Ref at w3schools:toFixed и toPrecision
EDIT:
Я узнал некоторое время назад, что w3schools не совсем лучший источник, но я забыл об этом ответе, пока не увидел комментарий kzh "восторженный". Вот дополнительные ссылки от 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 0.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 .990 The price of My Car is 34.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 0.00 The price of Golf Shirt is .99 The price of My Car is 34.56это дает то, что вы ожидали. Нет никакой работы по угадыванию, и нет округления.
при определенных обстоятельствах,
toPrecision()вернется экспоненциальной форме записи, в то время какtoFixed()не будет.
примеры ясно говорят:
var A = 123.456789; 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() // --- ERROR --- 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