สรุป
ตอนนี้ฉันคิดถึงสามวิธี หากผู้อ่านนึกถึงวิธีการที่ดีอื่น ๆ พวกเขายังสามารถสื่อสารได้
นกเพชร
บิตโอเปอเรเตอร์
math.floor math.ceil
คำอธิบาย
1. Parseint
1. ตัวอย่าง
parseint ("13nash"); // 13parseint ("") // nanparseint ("0xa") // 10 (hexadecimal) parseint ("13") // 13parseint ("070") // ES3 คือ 562. กฎการแปลง:
(1). ตามตัวอย่าง (1) ParseInt จะถูกแยกวิเคราะห์จนกว่าจะหยุดเมื่อไม่มีจำนวน
(2). ตามตัวอย่าง (2) มันเป็นน่านเมื่อแยกสตริงเปล่าแทนที่จะเป็น 0
(3). ตามตัวอย่าง (3) ParseInt สามารถแปลงตัวเลขเลขฐานสิบหกให้เป็นทศนิยม
(4). ตามตัวอย่าง (4) ParseInt ละเว้นช่องว่างของสตริง
3. ข้อเสีย:
(1). ตามตัวอย่าง (5) เราสามารถรู้ได้ว่า ParseInt ไม่เข้ากันเมื่อแปลงอาร์เรย์ octal ES3 จะถือว่า 070 เป็นค่า octal แต่ ES5 จะถือว่า 070 เป็นทศนิยม
(2). ตามตัวอย่าง (6) (7) เราสามารถรู้ได้ว่าเมื่อ ParseInt ถูกเรียกใช้
4. คำอธิบาย: ทำไม (5) (6) การประหารชีวิตแปลง 070 เป็นจำนวนเต็ม แต่ผลลัพธ์แตกต่างกัน? นี่เป็นจุดที่สองในการแก้ข้อบกพร่อง
เพราะในการอ่านเอกสารอย่างเป็นทางการฉันเห็นว่าสตริงไม่ใช่สตริงจึงถูกแปลงเป็นหนึ่ง ข้อความนี้ กล่าวคือหากพารามิเตอร์ไม่ใช่สตริงมันจะแปลงเป็นสตริงก่อนแล้วจึงเป็นจำนวนเต็ม ตัวอย่างเช่น ParseInt (070) ในตัวอย่าง (6) จริงแปลง 070 เป็นสตริงก่อน คุณสามารถลอง 070+ "" หรือสตริง (070) และรู้ว่า 070 จะถูกแปลงเป็น "56" เพราะ 070 เป็นระบบ octal จากนั้นมันจะกลายเป็น parseint ("56") และจำนวนเต็มสุดท้ายคือ 56 ไม่ว่าคุณจะอยู่ใน ES3 หรือ ES5 มันคือ 56
2. บิตโอเปอเรเตอร์
1. ตัวอย่าง
console.log (0 | "123.45") // 123console.log (0 | 123.45) // 123console.log (0 ^ 123.45) // 123console.log (~~ 123.45) // 123
2. หลักการ: JavaScript ไม่มีแนวคิดของจำนวนเต็มและประเภทตัวเลขทั้งหมดเป็นตัวเลขลอยความแม่นยำสองจุด เมื่อใช้ตัวดำเนินการบิตมันจะแปลงตัวถูกดำเนินการเป็นจำนวนเต็มก่อนซึ่งสะดวกสำหรับการทำงาน 0 และค่าอื่น ๆ จะไม่เปลี่ยนค่าการดำเนินงาน
3. Math.Floor และ Math.Ceil
1. ตัวอย่าง
console.log (math.floor (2.3) // 2console.log (math.floor (-2.3) //-3console.log (math.ceil (2.3) // 3console.log (math.ceil (-2.3) //-2-2-2-2-2-2-2-2-2
2. ทั้งสองไม่เพียงพอ: Math.Floor ได้รับจำนวนเต็มขั้นต่ำของจำนวน; ในขณะที่ Math.Ceil ได้รับจำนวนเต็มสูงสุด ดังนั้นถ้าเราโค้งมน -2.3 เราจะได้รับ -2 แต่ถ้าเราใช้คณิตศาสตร์ floor เราจะได้รับ -3 2.3 ใช้ Math.Ceil เพื่อรับ 3 แต่เราแค่ต้องการ 2
3. แก้ปัญหา:
// กำหนดฟังก์ชั่นฟังก์ชั่นด้วยตัวเอง getInt (val) {return val> 0? Math.floor (Val): Math.Ceil (Val);}