Відповіді:
toFixed(n)забезпечує nдовжину після десяткової крапки; toPrecision(x)забезпечує xзагальну довжину.
Посилання на W3Schools: toFixed і toPrecision
EDIT :
Нещодавно я дізнався, що w3schools - це не найкраще джерело, але я забув про цю відповідь, поки не побачив коментаря kzh, uh, "захопленого" коментаря. Ось додаткові відгуки від центру Mozilla Doc дляtoFixed()та дляtoPrecision(). На щастя для всіх нас, MDC та w3schools погоджуються між собою в цьому випадку.
Для повноти слід зазначити, що toFixed()еквівалентно toFixed(0)та toPrecision()просто повертає вихідний номер без форматування.
toPrecision(x)не "забезпечує xзагальну довжину", він форматується на ряд заданих значущих цифр. Наприклад, 0.0000022.toPrecision(1)повернеться 0.000002.
toPrecision(x)забезпечує xзагальну довжину". не обов'язково тримається. Приклад зустрічного:0.00001234.toPrecision(3)
Я вважаю, що перший дає вам фіксовану кількість десяткових знаків, тоді як останній дає фіксовану кількість значущих цифр.
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"
EDIT: О, і якщо ви не новачок у JavaScript, я настійно рекомендую книгу " JavaScript: хороші частини " Дугласа Крокфорда.
Приклади говорять чітко:
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
Я думаю, що це найкраще відповісти прикладом.
Скажімо, у вас є такі дані:
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"
За певних обставин toPrecision()повернеться експоненціальні позначення, тоді як toFixed()не буде.
toExponential()це окрема функція .
a = 999999999999999934464;, a.toFixed(0)повертається "1e+21". Можливо, точнішою відповіддю було б те, що toFixed () не повертає експоненціальні позначення, якщо не зробить toString ().
Наприклад, ми розглядаємо змінну a як, var a = 123,45 a.toPrecision (6) Вихід 123,450 a.toFixed (6) Вихід такий, як 123,450000 // 6 цифр після десяткової крапки
І те, toPrecision()і toFixed()інше - це функції, призначені для форматування числа перед його роздруком. Таким чином вони обоє повертають Stringзначення.
Є один виняток. Якщо ви використовуєте ці функції на від'ємному лічильнику числа, внаслідок переваги оператора, число повертається. Це означає, що toFixed()або toPrecision()поверне рядок спочатку, а потім -оператор мінус перетворить рядок назад у число у від'ємне значення. Нижче див. Приклад.
toPrecision()повертає Stringпредставляючий об'єкт Число у фіксованій або експоненціальній нотації, округленій до значущих цифр. Отже, якщо ви вказуєте, що ви хочете точність 1, він повертає перше значне число разом з будь-яким науковим позначенням, щоб вказати сили 10 або попередні 0 до його десяткового знака, якщо значне число <0.
const num1 = 123.4567;
// if no arguments are passed, it is similar to converting the Number to String
num1.toPrecision(); // returns "123.4567
// scientific notation is used when you pass precision count less than total
// number of digits left of the period
num1.toPrecision(2); // returns "1.2e+2"
// last digit is rounded if precision is less than total significant digits
num1.toPrecision(4); // returns "123.5"
num1.toPrecision(5); // returns "123.46"
const largeNum = 456.789;
largeNum.toPrecision(2); // returns "4.6e+2"
// trailing zeroes are added if precision is > total digits of the number or float
num1.toPrecision(9); // returns "123.456700"
const num2 = 123;
num2.toPrecision(4); // returns "123.0"
const num3 = 0.00123;
num3.toPrecision(4); // returns "0.001230"
num3.toPrecision(5); // returns "0.0012300"
// if the number is < 1, precision is by the significant digits
num3.toPrecision(1); // returns "0.001"
toFixed()повертає об'єкт, що Stringпредставляє число в позначенні з фіксованою точкою, округленим. Ця функція стосується лише цифр десяткової крапки
const num1 = 123.4567;
// if no argument is passed, the fractions are removed
num1.toFixed(); // returns "123"
// specifying an argument means you the amount of numbers after the decimal point
num1.toFixed(1); // returns "123.5"
num1.toFixed(3); // returns "123.457"
num1.toFixed(5); // returns "123.45670"
num1.toFixed(7); // returns "123.4567000"
// trying to operator on number literals
2.34.toFixed(1); // returns "2.3"
2.toFixed(1); // returns SyntaxError
(2).toFixed(1); // returns "2.0"
(2.34e+5).toFixed(1); // returns "234000.0"
Вище я згадував про виняток, коли використання цих функцій у від'ємних числових літералах повертає число, а не рядок через перевагу оператора. Ось кілька прикладів:
// Note: these are returning as Number
// toPrecision()
-123.45.toPrecision(); // returns -123.45
-123.45.toPrecision(2); // returns -120
-123.45.toPrecision(4); // returns -123.5
-2.34e+2.toPrecision(1); // returns -200
-0.0456.toPrecision(1); // returns -0.05
-0.0456.toPrecision(6); // returns -0.0456
// toFixed()
-123.45.toFixed(); // returns -123.45
-123.45.toFixed(1); // returns -123.5
-123.45.toFixed(4); // returns -123.45
-0.0456.toFixed(1); // returns -0
-0.0456.toFixed(6); // -0.0456
Веселий факт: є підписані нулі, як видно з -0.0456.toFixed(1)
Дивіться: Чи однакові +0 і -0?