Tại sao chúng ta cần sử dụng tham số cơ số khi gọi parseInt?


Câu trả lời:


103

Không phải lúc nào bạn cũng có thể muốn phân tích cú pháp số nguyên thành số cơ số 10, vì vậy việc cung cấp cơ số cho phép bạn chỉ định các hệ thống số khác.

Cơ số là số giá trị của một chữ số. Hệ thập phân sẽ là 16. Bát phân sẽ là 8, nhị phân sẽ là 2, v.v.

Trong parseInt()hàm, có một số điều bạn có thể làm để gợi ý về cơ số mà không cần cung cấp. Những điều này cũng có thể chống lại bạn nếu người dùng đang nhập một chuỗi khớp với một trong các quy tắc nhưng không có ý nghĩa rõ ràng. Ví dụ:

// Numbers with a leading 0 used a radix of 8 (octal) before ECMAScript 5.
// These days, browsers will treat '0101' as decimal.
var result = parseInt('0101');

// Numbers that start with 0x use a radix of 16 (hexidecimal)
var result = parseInt('0x0101');

// Numbers starting with anything else assumes a radix of 10
var result = parseInt('101');

// Or you can specify the radix, in this case 2 (binary)
var result = parseInt('0101', 2);

2
Vậy parseInt ('0101') cho 101 hay 65?
Vivekh

7
@Vivekh - Nó từng quay lại năm 2011 khi tôi đăng câu trả lời ban đầu. Kiểm tra nhanh trong Google Chrome dường như cho thấy rằng chúng đã thay đổi một chút. parseInt('0101')bây giờ trở lại 101. Các trình duyệt khác nhau có thể có các hành vi khác nhau. Luôn bao gồm cơ số để có kết quả đáng tin cậy.
Justin Niessner

@Vivekh - Bạn có thể xem tài liệu mới nhất tại developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Justin Niessner

Tài liệu gần đây nhất là ES 5 không chỉ định rằng không có cơ số nào được xử lý giống như truyền trong 10, nhưng cảnh báo bạn vẫn nên chuyển nó vào để hỗ trợ trình duyệt cũ hơn.
Juan Mendes,

1
Tôi đã luôn sử dụng parseInt(x, 0)vì một số lý do mà tôi không thể nhớ ngay bây giờ .. điều này có bằng với parseInt(x, 10)tôi bây giờ đang tự hỏi ...
OZZIE

35

Bởi vì nếu bạn có một số chuỗi như 0700và muốn đầu ra là số nguyên, 700bạn cần thông báo parseInt()rằng nó là số thập phân chứ không phải là số bát phân.

console.log(parseInt("0700"));
// 448

// I really wanted decimal (base 10)
console.log(parseInt("0700", 10));
// 700

// What is this? Binary, Decimal, Octal?
console.log(parseInt("0110"));
// 72

// as binary
console.log(parseInt("0110", 2));
// 6
Lưu ý tôi chỉ trả lời một nửa câu hỏi của bạn. Xem những người khác để biết định nghĩa tốt về cơ số thực sự là gì.


1
Ngoài ra, phân tích cú pháp nhị phân ('10101', 2)
Joe

1
console.log (parseInt ("0700")); đang quay lại // 700 chứ không phải 448.
Naren

@Naren 8 năm trước, nó là 448 trong bất kỳ bảng điều khiển trình duyệt nào mà tôi chạy. Trong Chrome hiện đại và trong Node, hôm nay tôi cũng có 700, nhưng có lẽ đó là hành vi không xác định vào thời điểm đó.
Michael Berkowski


7

Cơ số là cơ sở của một hệ thống số. Có vô số hệ thống số nhưng những hệ thống mà hầu hết mọi người quen thuộc là hệ cơ số 10 (thập phân) và cơ số 2 (nhị phân).

Các giá trị số có thể được diễn giải khác nhau theo các cơ sở khác nhau. Ví dụ: số 10 trong hệ nhị phân có thể được biểu diễn dưới dạng số 2 trong hệ thập phân.

Trong trường hợp của parseInt(), cơ số cho phép bạn chỉ định cơ số sẽ được sử dụng. Theo mặc định, cơ số 10 được sử dụng.

Tuy nhiên, cơ số phải luôn được chỉ định, ngay cả khi sử dụng cơ số 10. Hãy xem xét trường hợp

parseInt("010") // Trả về 8

Thoạt nhìn, bạn có thể mong đợi câu lệnh trả về 10. Việc sử dụng rõ ràng cơ số sẽ giúp tránh nhầm lẫn:

parseInt("010", 10) // Trả về: 10


4

Cơ số là số cơ sở của hệ thống số: http://en.wikipedia.org/wiki/Radix

Thông thường, bạn chỉ cần chỉ định cơ số nếu bạn muốn nó khác 10. Cụ thể hơn (từ http://www.w3schools.com/jsref/jsref_parseInt.asp ):

Nếu tham số cơ số bị bỏ qua, JavaScript sẽ giả định như sau:

Nếu chuỗi bắt đầu bằng "0x", cơ số là 16 (hệ thập lục phân) Nếu chuỗi bắt đầu bằng "0", cơ số là 8 (bát phân). Tính năng này không được dùng nữa Nếu chuỗi bắt đầu bằng bất kỳ giá trị nào khác, cơ số là 10 (thập phân)


2

Chỉ cần thêm một số thông tin bổ sung trả lời rõ ràng câu hỏi:

Nếu cơ số là không xác định hoặc 0 (hoặc không có), JavaScript sẽ giả định như sau:

  • [...]
  • Nếu chuỗi đầu vào bắt đầu bằng "0", cơ số là tám (bát phân) hoặc 10 (thập phân). Chính xác cơ số nào được chọn phụ thuộc vào việc triển khai. ECMAScript 5 chỉ định rằng 10 (thập phân) được sử dụng, nhưng không phải tất cả các trình duyệt đều hỗ trợ điều này. Vì lý do này, hãy luôn chỉ định một cơ số khi sử dụng parseInt.
  • [...]

Nguồn: MDN parseInt ()


2

Đó chỉ là ý kiến ​​của tôi nhưng ý tưởng rằng "chúng ta cần sử dụng cơ số" nhanh chóng trở nên lỗi thời. Vấn đề thực sự đã xảy ra một thời gian trước đây bởi vì những người bên ngoài thế giới CNTT thường không sử dụng các ký hiệu số khác với số thập phân và thường cung cấp các số thập phân không có đệm như "010". Nhưng vì ECMAScript 6 số bát phân trong JS có tiền tố là "0o" chứ không chỉ là "0" như trong ECMAScript 5 và 3. Vì vậy, nếu bạn không nhắm mục tiêu họ IE (đó là tình huống không hiếm bây giờ), bạn có thể bỏ qua cơ số an toàn.


1

Tham số cơ số được sử dụng để chỉ định hệ thống số nào sẽ được sử dụng, ví dụ: cơ số 16 (hệ thập lục phân) cho biết rằng số trong chuỗi phải được phân tích cú pháp từ số thập lục phân thành số thập phân.

Nếu tham số cơ số bị bỏ qua, JavaScript sẽ giả định như sau:

Nếu chuỗi bắt đầu bằng "0x", cơ số là 16 (hệ thập lục phân)

Nếu chuỗi bắt đầu bằng "0", cơ số là 8 (bát phân). Tính năng này không được dùng nữa

Nếu chuỗi bắt đầu bằng bất kỳ giá trị nào khác, cơ số là 10 (thập phân)

Nguồn W3Schools


1

số trong paseInt () là gì?

Các parseInt()chức năng phân tích một chuỗi và trả về một số nguyên. Nó cần một đối số thứ hai cho cơ số , chỉ định cơ số của số trong chuỗi . Cơ số có thể là một số nguyên giữa 236.

Lệnh gọi hàm trông giống như (Cú pháp):

parseInt(string, radix);

Một số ví dụ để làm rõ khái niệm cơ số

Ví dụ 1:

var a = parseInt("11", 2);

Biến cơ số nói rằng "11" nằm trong hệ nhị phân, hoặc cơ số 2 . Do đó, ví dụ này chuyển đổi chuỗi "11" thành số nguyên 3.

Ví dụ 2:

var a = parseInt("10011", 16);

Ở đây, cơ số cho biết parseInt()đó 10011số thập lục phân và do đó ở dạng số nguyên, nó được chuyển đổi thành65553

Về cơ bản, ngắn gọn là câu chuyện ngắn, đối số cơ số cho biết parseInt()rằng chuỗi được truyền dưới dạng tham số 1 là của một hệ thống cụ thể (nhị phân, thập lục phân, v.v.) và nó cần được chuyển đổi thành một số nguyên dưới dạng sản phẩm cuối cùng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.