Blog#49: Tại sao trong JavaScript parseInt(0,0000005) kết quả lại là “5” 😊 (Series: Bí kíp Javascript – PHẦN 40)

Mình là TUẤN hiện đang là một Full-stack Developer tại Tokyo 😊. Nếu bạn thấy Blog này hay xin hãy cho mình một like và đăng ký để ủng hộ mình nhé 😉. Tại sao trong JavaScript parseInt(0.0000005) === 5😱? Một câu hỏi tuyệt vời! parseInt(0.0000005), output mà các bạn mong chờ là 0, nhưng

image.png

Mình là TUẤN hiện đang là một Full-stack Developer tại Tokyo 😊.
Nếu bạn thấy Blog này hay xin hãy cho mình một like và đăng ký để ủng hộ mình nhé 😉.

Tại sao trong JavaScript parseInt(0.0000005) === 5😱? Một câu hỏi tuyệt vời!

parseInt(0.0000005), output mà các bạn mong chờ là 0, nhưng tại sao nó lại là 5? Hãy cùng nhau tìm hiểu vấn đề này.

1. Khi nào thì sử dụng parseInt?

Trước hết, bạn thường sử dụng khi parseInt ở đâu và khi nào? Hầu hết, chúng ta sử dụng nó để parse - phân tích một chuỗi và trả về một số nguyên tương ứng của nó.

2. Về hàm parseInt

Theo tài liệu của MDN, “parseInt(string, radix) phân tích đối số string và trả về một số nguyên với cơ số đã chỉ định (radix là cơ số trong TOÁN mà ae đã học hồi cấp 3).”

Cú pháp

parseInt(string)parseInt(string, radix)

Ồ vậy thì có lẽ một phần của câu trả lời ở đây. Tức là khi ae xài cái hàm này mà ko cung cấp tham số thứ 2 (cơ số) -> nó sẽ là mặc định. Nếu đã là mặc định thì nó có thể là một số nào đó mà ae chưa biết hoặc phải đọc tài liệu mới biết. Nên việc ae ko lường trước được giá trị trả về của nó là chuyện rất bình thường.

Test phát xem sao

parseInt('0.5')// 0  parseInt('0.5')// 0  parseInt('0.05')// 0  parseInt('0.005')// 0  parseInt('0.0005')// 0  parseInt('0.00005')// 0  parseInt('0.000005')// 0  parseInt('015')// 15  parseInt('015',8)// 13  parseInt('15px',10)// 15

Vậy là cái radix này ảnh hưởng đến kết quả phết nhở 😄

3. Làm thế nào để parseInt chuyển đổi string sang number?

Khi tham số đầu tiên của parseInt là một số, thì nó phân tích cú pháp như thế nào?

Sự thật của parseInt(0.0000005) === 5 cũng là đây …

3.1. Bước đầu tiên? Chuyển đổi số thành một chuỗi.

Sử dụng hàm String để xem output của mỗi giá trị trả về là gì:

// Tất cả đều được chuyển thành chuỗi hếtString(0.5);// => '0.5'String(0.05);// => '0.05'String(0.005);// => '0.005'String(0.0005);// => '0.0005' String(0.00005);// => '0.00005'String(0.000005);// => '0.000005'String(0.0000005);// => '5e-7' Chú ý ở đây nhé

3.2. Bước thứ hai là thực hiện thao tác làm tròn số.

“Khi chúng ta sử dụng parseInt(0.0000005), nó bằng sẽ bằng parseInt('5e-7').

parseInt chỉ có thể phân tích phần đầu của chuỗi dưới dạng giá trị số nguyên; nó bỏ qua bất kỳ đơn vị nào không thể được hiểu là một phần của ký hiệu số nguyên.

parseInt(0,0000005)// 5parseInt('5e-7')// 5// Nó tương tự nhưparseInt('15px',10)// 15

Cuối cùng, câu trả lời sẽ chỉ trả về 5 vì đó là ký tự duy nhất là một số cho đến một ký tự không phải là e, vì vậy phần còn lại của nó e-7 sẽ bị loại bỏ.”

4. Cách lấy phần nguyên của một số có dấu phẩy động một cách an toàn?

Nên sử dụng hàm Math.floor() sau:

Math.floor(0.5);// => 0
Math.floor(0.05);// => 0
Math.floor(0.005);// => 0
Math.floor(0.0005);// => 0
Math.floor(0.00005);// => 0
Math.floor(0.000005);// => 0
Math.floor(0.0000005);// => 0

5. Roundup

Bây giờ, bạn có thể giải thích tại sao parseInt(99999999999999999999999999) lại bằng 1 không?

Như mọi khi, mình hy vọng bạn thích bài viết này và học thêm được điều gì đó mới.

Cảm ơn và hẹn gặp lại các bạn trong những bài viết tiếp theo! 😍

Nếu bạn thấy Blog này hay xin hãy cho mình một like và đăng ký để ủng hộ mình nhé. Thank you.😉

6. Ref

https://tuan200tokyo.blogspot.com/2022/11/blog49-tai-sao-trong-javascript.html

Nguồn: viblo.asia

Bài viết liên quan

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=

Bài 1 – React Native DevOps các khái niệm và các cài đặt căn bản

Hướng dẫn setup jenkins agent để bắt đầu build mobile bằng jenkins cho devloper an t

Chuyển đổi từ monolith sang microservices qua ví dụ

1. Why microservices? Microservices là kiến trúc hệ thống phần mềm hướng dịch vụ,