Hướng dẫn why parseint is not used more often in javascript? - tại sao parseint không được sử dụng thường xuyên hơn trong javascript?

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ố

Show
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 đổi

giá 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ếu

Radix

Nó chuyển đổi

giá 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ếu

Radix

    > parseInt('0xA')
    10

Các radix

Nếu

Radix

    > parseInt('0xA', 16)
    10
    > parseInt('A', 16)
    10

bị thiếu thì nó được coi là 10 trừ khi

parseInt()

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')
    10
0

Điều này vượt xa phạm vi [−253, 253] số nguyên tiếp giáp trong JavaScript [2].

    > parseInt('0xA')
    10
1

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à

  1. Math.round ()
  2. , luôn luôn xoay quanh số nguyên gần nhất của người Viking:

Hướng dẫn why parseint is not used more often in javascript? - tại sao parseint không được sử dụng thường xuyên hơn trong javascript?

Đâ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')
    10
2

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:
What you should use instead is the
    > parseInt('0xA')
    10
7 function, and convert the code above to this:

    > parseInt('0xA')
    10
3

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:
  • 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')
    10
8 và
    > parseInt('0xA')
    10
9?
While
    > parseInt('0xA', 16)
    10
    > parseInt('A', 16)
    10
2 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)
    10
3 by default, and it will return
    > parseInt('0xA', 16)
    10
    > parseInt('A', 16)
    10
1 only if it doesn’t find any number.

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)
    10
5, nó
    > parseInt('0xA')
    10
9 sẽ dừng khi nhìn thấy
    > parseInt('0xA', 16)
    10
    > parseInt('A', 16)
    10
7 và nó sẽ chỉ trả lại
    > parseInt('0xA', 16)
    10
    > parseInt('A', 16)
    10
8, trong khi
    > parseInt('0xA')
    10
8 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
    8
0.

    > parseInt('0xA')
    10
4

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')
    10
5

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:

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
    8
6 to
    > parseInt('010')
    8
    > parseInt('0109')  // ignores digits ≥ 8
    8
7, then you should use
    > parseInt('0xA')
    10
9, but most of the times you better stick with
    > parseInt('0xA')
    10
8 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')
    10
8 và
    > parseInt('0xA')
    10
9?

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)
    10
5, nó
    > parseInt('0xA')
    10
9 sẽ dừng khi nhìn thấy
    > parseInt('0xA', 16)
    10
    > parseInt('A', 16)
    10
7 và nó sẽ chỉ trả lại
    > parseInt('0xA', 16)
    10
    > parseInt('A', 16)
    10
8, trong khi
    > parseInt('0xA')
    10
8 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
    8
0.

    > parseInt('0xA')
    10
6

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:

Là tốt hơn để sử dụng số hoặc parseInt?

Ví dụ: ifyou muốn chuyển đổi một chuỗi với pixel trên đó chỉ một số, như 32px thành 32, sau đó bạn nên sử dụng ParseInt, nhưng hầu hết các lần bạn nên gắn bó với số tốt hơn.most of the times you better stick with Number instead.

ParseInt slow javascript?

Vấn đề là ParseInt dường như rất chậm (đó không phải là vấn đề thời gian chờ, nó được đặt thành 1).Từ những gì tôi có thể thấy, nó dường như đang bỏ qua một số dữ liệu, vì vậy mỗi lúc và sau đó một ban nhạc bị bỏ lỡ.Cách duy nhất tôi có thể khắc phục điều này là chèn độ trễ giữa mỗi tọa độ được gửi.parseInt seems to be very very slow (it's not the timeout issue, it's set to 1). From what I can see, it seems to be skipping some data, so every now and then a band gets missed out. The only way I can fix this is to insert a delay between each coordinate being sent.

Sự thay thế cho ParseInt trong JavaScript là gì?

parsefloat () parsefloat () khá giống với parseInt (), với hai khác biệt chính.Đầu tiên, không giống như parseInt (), parseFloat () không lấy radix làm đối số.Điều này có nghĩa là chuỗi phải đại diện cho một số điểm nổi ở dạng thập phân (radix 10), không phải octal (radix 8) hoặc thập lục phân (radix 6). parseFloat() is quite similar to parseInt() , with two main differences. First, unlike parseInt() , parseFloat() does not take a radix as an argument. This means that string must represent a floating-point number in decimal form (radix 10), not octal (radix 8) or hexadecimal (radix 6).

ParseInt có giới hạn không?

Phạm vi của INT là giữa số nguyên.MAX_VALUE và số nguyên.Bao gồm MIN_VALUE (tức là từ 2147483647 xuống đến -2147483648).Bạn không thể phân tích giá trị INT của phạm vi đó.You cannot parse the int value of out that range.