Trong JavaScript, tất cả các số là điểm nổi. Số nguyên là số điểm nổi mà không có một phần. Chuyển đổi một số
NĐối với một số nguyên có nghĩa là tìm kiếm số nguyên gần nhất với
NĐối với một số nguyên có nghĩa là tìm kiếm số nguyên gần nhất với
parseInt[][trong đó gần nhất là một vấn đề của định nghĩa]. Bạn có thể nghĩ rằng
Thực hiện nhiệm vụ này, nhưng nó không có. Ít nhất, không phải lúc nào cũng vậy.
Cách thức hoạt động của ParseInt []ParseInt []
parseInt[value, radix?]
có chữ ký sau:
Nó chuyển đổigiá trị
Để chuỗi, bỏ qua khoảng trắng hàng đầu và sau đó phân tích cú pháp nhiều chữ số số nguyên liên tiếp như nó có thể tìm thấy.
Các radix
NếuRadix
Nó chuyển đổigiá trị
'0x'Để chuỗi, bỏ qua khoảng trắng hàng đầu và sau đó phân tích cú pháp nhiều chữ số số nguyên liên tiếp như nó có thể tìm thấy.
'0X'Các radix
NếuRadix
> parseInt['0xA'] 10
Các radix
NếuRadix
> parseInt['0xA', 16] 10 > parseInt['A', 16] 10
bị thiếu thì nó được coi là 10 trừ khi
bắt đầu với
> parseInt['010'] 8 > parseInt['0109'] // ignores digits ≥ 8 8
hoặc
, trong trường hợp
được đặt thành 16 [thập lục phân].
> parseInt[' 12', 10] 12 > parseInt['12**', 10] 12 > parseInt['12.34', 10] 12 > parseInt[12.34, 10] 12
Radix
parseInt[]đã 16 thì tiền tố thập lục phân là tùy chọn.
> parseInt[1000000000000000000000.5, 10] 1
Cho đến nay chúng tôi đã mô tả hành vi của
Theo đặc tả ECMAScript. Ngoài ra, một số công cụ đặt radix thành 8 nếu số nguyên bắt đầu bằng số 0 hàng đầu:Vì vậy, tốt nhất là luôn luôn chỉ định rõ ràng radix.
> parseInt[0.0000008, 10] 8 > String[0.0000008] '8e-7'
Ví dụ
parseInt[]Một vài ví dụ:
Ví dụ cuối cùng cho chúng ta hy vọng rằng chúng ta có thể sử dụngĐể chuyển đổi số sang số nguyên. Than ôi, đây là một ví dụ trong đó việc chuyển đổi không chính xác:
> String[1e+20] '100000000000000000000' > String[1e+21] '1e+21'
Giải thích: Đối số trước tiên được chuyển đổi thành chuỗi.
> String[1000000000000000000000.5]
'1e+21'
ParseInt
Doesn coi là người khác là một chữ số số nguyên và do đó dừng phân tích cú pháp sau 1. Một ví dụ khác:
Điều này rõ ràng giới hạn tính hữu ích của. Tuy nhiên, lưu ý rằng ký hiệu theo cấp số nhân với số mũ dương bắt đầu
> Math.round[3.2] 3 > Math.round[3.5] 4 > Math.round[3.8] 4 > Math.round[-3.2] -3 > Math.round[-3.5] -3 > Math.round[-3.8] -4
± 1e+21
[1]:
> parseInt['0xA'] 100
Điều này vượt xa phạm vi [−253, 253] số nguyên tiếp giáp trong JavaScript [2].
> parseInt['0xA'] 101
Giải pháp thay thế cho ParseInt []
Bài đăng trên blog của các số nguyên và các toán tử thay đổi trong JavaScript, đề cập đến một số lựa chọn thay thế để chuyển đổi số thành số nguyên. Một lựa chọn tốt là
- Math.round []
- , luôn luôn xoay quanh số nguyên gần nhất của người Viking:
Đây là điều tôi thấy tất cả các lần, bạn có một số mã trong một thời điểm nào đó bạn có một biến có chứa một số, có thể nó đến từ một biểu mẫu hoặc từ kết quả của một số cuộc gọi API, hoặc bất cứ điều gì và bạn muốn chuyển đổi nó thành một số nguyên.
Một cái gì đó như thế này chẳng hạn:
> parseInt['0xA'] 102
Nhập chế độ FullScreenen EXIT Mode FullScreen
Mặc dù mã trên hoạt động, nhưng nó là một cách cực kỳ kém hiệu quả để phân tích nó. Thay vào đó, những gì bạn nên sử dụng là chức năng
> parseInt['0xA'] 107 và chuyển đổi mã ở trên thành này:
What you should use instead is the
> parseInt['0xA'] 107 function, and convert the code above to this:
> parseInt['0xA'] 103
Nhập chế độ FullScreenen EXIT Mode FullScreen
Mặc dù mã trên hoạt động, nhưng nó là một cách cực kỳ kém hiệu quả để phân tích nó. Thay vào đó, những gì bạn nên sử dụng là chức năng
> parseInt['0xA'] 107 và chuyển đổi mã ở trên thành này:
- Từ những thay đổi trên, bạn đạt được hai điều:
- một mã dễ đọc hơn
một cách hoạt động hơn nhiều để chuyển đổi một chuỗi thành một số nguyên
Nhưng những gì khác biệt giữa
> parseInt['0xA'] 108 và
> parseInt['0xA'] 109?
While
> parseInt['0xA', 16] 10 > parseInt['A', 16] 102 will try to find the first number in the string passed, and convert it to the radix passed, which is
> parseInt['0xA', 16] 10 > parseInt['A', 16] 103 by default, and it will return
> parseInt['0xA', 16] 10 > parseInt['A', 16] 101 only if it doesn’t find any number.
Hàm
> parseInt['0xA', 16] 10 > parseInt['A', 16] 100 đánh giá chuỗi đầy đủ và chuyển đổi nó thành một chuỗi và nếu chuỗi không phải là một số, nó sẽ chỉ trả về
> parseInt['0xA', 16] 10 > parseInt['A', 16] 101. Mặc dù
> parseInt['0xA', 16] 10 > parseInt['A', 16] 102 sẽ cố gắng tìm số đầu tiên trong chuỗi được truyền và chuyển đổi nó thành radix được truyền, đó là
> parseInt['0xA', 16] 10 > parseInt['A', 16] 103 theo mặc định và nó sẽ trả lại
> parseInt['0xA', 16] 10 > parseInt['A', 16] 101 chỉ khi nó không tìm thấy bất kỳ số nào.
Điều này có nghĩa là nếu bạn vượt qua một chuỗi như
> parseInt['0xA', 16] 10 > parseInt['A', 16] 105, nó
> parseInt['0xA'] 109 sẽ dừng khi nhìn thấy
> parseInt['0xA', 16] 10 > parseInt['A', 16] 107 và nó sẽ chỉ trả lại
> parseInt['0xA', 16] 10 > parseInt['A', 16] 108, trong khi
> parseInt['0xA'] 108 sẽ đánh giá toàn bộ chuỗi và trả về giá trị chính xác
> parseInt['010'] 8 > parseInt['0109'] // ignores digits ≥ 8 80.
> parseInt['0xA'] 104
Nhập chế độ FullScreenen EXIT Mode FullScreen
Mặc dù mã trên hoạt động, nhưng nó là một cách cực kỳ kém hiệu quả để phân tích nó. Thay vào đó, những gì bạn nên sử dụng là chức năng > parseInt['0xA']
10
7 và chuyển đổi mã ở trên thành này:
Từ những thay đổi trên, bạn đạt được hai điều:
Well, because of performances.
một mã dễ đọc hơn
> parseInt['0xA'] 105
Nhập chế độ FullScreenen EXIT Mode FullScreen
Mặc dù mã trên hoạt động, nhưng nó là một cách cực kỳ kém hiệu quả để phân tích nó. Thay vào đó, những gì bạn nên sử dụng là chức năng
> parseInt['0xA'] 107 và chuyển đổi mã ở trên thành này:
Từ những thay đổi trên, bạn đạt được hai điều:
một mã dễ đọc hơn
For example ifyou want to
convert a string with pixels on it to just a number, like
> parseInt['010'] 8 > parseInt['0109'] // ignores digits ≥ 8 86 to
> parseInt['010'] 8 > parseInt['0109'] // ignores digits ≥ 8 87, then you should use
> parseInt['0xA'] 109, but most of the times you better stick with
> parseInt['0xA'] 108 instead.
Or even if you want to convert a number from a decimal system to something else.
một cách hoạt động hơn nhiều để chuyển đổi một chuỗi thành một số nguyên
Nhưng những gì khác biệt giữa
> parseInt['0xA'] 108 và
> parseInt['0xA'] 109?
Hàm > parseInt['0xA', 16]
10
> parseInt['A', 16]
10
0 đánh giá chuỗi đầy đủ và chuyển đổi nó thành một chuỗi và nếu chuỗi không phải là một số, nó sẽ chỉ trả về > parseInt['0xA', 16]
10
> parseInt['A', 16]
10
1. Mặc dù > parseInt['0xA', 16]
10
> parseInt['A', 16]
10
2 sẽ cố gắng tìm số đầu tiên trong chuỗi được truyền và chuyển đổi nó thành radix được truyền, đó là > parseInt['0xA', 16]
10
> parseInt['A', 16]
10
3 theo mặc định và nó sẽ trả lại > parseInt['0xA', 16]
10
> parseInt['A', 16]
10
1 chỉ khi nó không tìm thấy bất kỳ số nào.
Điều này có nghĩa là nếu bạn vượt qua một chuỗi như
> parseInt['0xA', 16] 10 > parseInt['A', 16] 105, nó
> parseInt['0xA'] 109 sẽ dừng khi nhìn thấy
> parseInt['0xA', 16] 10 > parseInt['A', 16] 107 và nó sẽ chỉ trả lại
> parseInt['0xA', 16] 10 > parseInt['A', 16] 108, trong khi
> parseInt['0xA'] 108 sẽ đánh giá toàn bộ chuỗi và trả về giá trị chính xác
> parseInt['010'] 8 > parseInt['0109'] // ignores digits ≥ 8 80.
> parseInt['0xA'] 106
Nhập chế độ FullScreenen EXIT Mode FullScreen
Mặc dù mã trên hoạt động, nhưng nó là một cách cực kỳ kém hiệu quả để phân tích nó. Thay vào đó, những gì bạn nên sử dụng là chức năng
> parseInt['0xA'] 107 và chuyển đổi mã ở trên thành này: