Câu trả lời:
toFixed(n)
cung cấp n
độ dài sau dấu thập phân; toPrecision(x)
cung cấp x
tổng chiều dài.
Tham khảo tại w3schools: toFixed and toPre precision
CHỈNH SỬA :
Một thời gian trước, tôi biết được rằng w3schools không phải là nguồn tốt nhất, nhưng tôi đã quên câu trả lời này cho đến khi tôi thấy nhận xét "nhiệt tình" của kzh. Dưới đây là các tham khảo bổ sung từ Trung tâm Tài liệu Mozilla chotoFixed()
và chotoPrecision()
. May mắn thay cho tất cả chúng tôi, MDC và w3schools đồng ý với nhau trong trường hợp này.
Để đầy đủ, tôi nên đề cập rằng toFixed()
tương đương với toFixed(0)
và toPrecision()
chỉ trả về số ban đầu mà không có định dạng.
toPrecision(x)
không "cung cấp x
tổng chiều dài", nó định dạng thành một số chữ số có nghĩa nhất định. Ví dụ, 0.0000022.toPrecision(1)
sẽ trở lại 0.000002
.
toPrecision(x)
cung cấp x
tổng chiều dài." không nhất thiết phải giữ. Ví dụ về bộ đếm:0.00001234.toPrecision(3)
Tôi tin rằng cái trước cung cấp cho bạn một số chữ số thập phân cố định, trong khi cái sau cung cấp cho bạn một số chữ số có nghĩa cố định.
Math.PI.toFixed(2); // "3.14"
Math.PI.toPrecision(2); // "3.1"
Hơn nữa, toPrecision
sẽ mang lại ký hiệu khoa học nếu có nhiều chữ số nguyên trong số hơn độ chính xác được chỉ định.
(Math.PI * 10).toPrecision(2); // "31"
(Math.PI * 100).toPrecision(2); // "3.1e+2"
CHỈNH SỬA: Ồ, và nếu bạn chưa quen với JavaScript, tôi rất có thể giới thiệu cuốn sách " JavaScript: The Good Parts " của Douglas Crockford.
Ví dụ nói rõ ràng:
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
Tôi nghĩ rằng điều này được trả lời tốt nhất với một ví dụ.
Giả sử bạn có dữ liệu sau:
var products = [
{
"title": "Really Nice Pen",
"price": 150
},
{
"title": "Golf Shirt",
"price": 49.99
},
{
"title": "My Car",
"price": 1234.56
}
]
Bạn muốn hiển thị từng sản phẩm này với tiêu đề và giá được định dạng. Hãy thử sử dụng toPrecision
trước:
document.write("The price of " + products[0].title + " is $" + products[0].price.toPrecision(5));
The price of Really Nice Pen is $150.00
Có vẻ tốt, vì vậy bạn có thể nghĩ rằng điều này cũng sẽ hiệu quả với các sản phẩm khác:
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
Không tốt như vậy. Chúng tôi có thể khắc phục điều này bằng cách thay đổi số lượng chữ số có nghĩa cho mỗi sản phẩm, nhưng nếu chúng tôi lặp đi lặp lại một mảng sản phẩm có thể khó khăn. Hãy sử dụng toFixed
thay thế:
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
Điều này tạo ra những gì bạn mong đợi. Không có công việc phỏng đoán liên quan, và không có làm tròn.
Chỉ:
49.99.toFixed(5)
// → "49.99000"
49.99.toPrecision(5)
// → "49.990"
Trong một số trường hợp nhất định, toPrecision()
sẽ trả về ký hiệu hàm mũ, trong khi toFixed()
thì không.
toExponential()
là một chức năng riêng biệt .
a = 999999999999999934464;
, a.toFixed(0)
trả về "1e+21"
. Có lẽ một câu trả lời chính xác hơn sẽ là toFixed () không trả về ký hiệu hàm mũ trừ khi toString () thực hiện.
Ví dụ, chúng ta coi biến a as, var a = 123.45 a.toPrechure (6) Đầu ra là 123.450 a.toFixed (6) Đầu ra giống như 123.450000 // 6 chữ số sau dấu thập phân
Cả hai toPrecision()
và toFixed()
đều là các chức năng được thiết kế để định dạng một số trước khi in ra. Vì vậy, cả hai đều trả về String
giá trị.
Có một ngoại lệ. Nếu bạn sử dụng các hàm này trên một chữ Số âm , do toán tử ưu tiên, một Số được trả về. Điều này có nghĩa là toFixed()
hoặc toPrecision()
sẽ trả về một chuỗi trước tiên, và sau đó -
toán tử trừ sẽ chuyển đổi chuỗi trở lại một Số dưới dạng giá trị âm. Vui lòng xem ví dụ bên dưới.
toPrecision()
trả về một String
đại diện cho đối tượng Number trong ký hiệu điểm cố định hoặc hàm mũ được làm tròn đến chữ số có nghĩa. Vì vậy, nếu bạn chỉ định rằng bạn muốn độ chính xác là 1, nó sẽ trả về số có nghĩa đầu tiên cùng với ký hiệu khoa học để chỉ ra lũy thừa của 10 hoặc số 0 trước dấu thập phân của nó nếu số có nghĩa là <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()
trả về một String
đại diện cho đối tượng Number trong ký hiệu điểm cố định, được làm tròn lên. Hàm này chỉ quan tâm đến các số thập phân
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"
Tôi đã đề cập ở trên một ngoại lệ trong đó việc sử dụng các hàm này trên các ký tự Số âm sẽ trả về Số chứ không phải Chuỗi do toán tử ưu tiên. Dưới đây là một số ví dụ:
// 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
Thực tế thú vị: có các số 0 có dấu như được nhìn thấy từ -0.0456.toFixed(1)
Hãy xem: +0 và -0 có giống nhau không?