Разница между 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