ทำไมเราต้องใช้พารามิเตอร์ radix เมื่อเรียก parseInt?


คำตอบ:


105

คุณอาจไม่ต้องการแยกวิเคราะห์จำนวนเต็มเป็นเลขฐาน 10 เสมอไปดังนั้นการระบุเลขฐานจะช่วยให้คุณระบุระบบตัวเลขอื่นได้

radix คือจำนวนค่าของตัวเลขหลักเดียว เลขฐานสิบหกจะเป็น 16 ฐานแปดเป็น 8 ไบนารีจะเป็น 2 และอื่น ๆ ...

ในparseInt()ฟังก์ชั่นนี้มีหลายสิ่งที่คุณสามารถทำได้เพื่อบอกใบ้รัศมีโดยไม่ต้องระบุ สิ่งเหล่านี้สามารถต่อต้านคุณได้หากผู้ใช้ป้อนสตริงที่ตรงกับกฎข้อใดข้อหนึ่ง แต่ไม่ได้มีความหมายอย่างชัดแจ้ง ตัวอย่างเช่น:

// 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
parseInt ('0101') ให้ 101 หรือ 65?
Vivekh

7
@Vivekh - เคยย้อนกลับไปในปี 2011 เมื่อฉันโพสต์คำตอบครั้งแรก การตรวจสอบอย่างรวดเร็วใน Google Chrome ดูเหมือนจะบ่งบอกว่ามีการเปลี่ยนแปลงเล็กน้อย parseInt('0101')ตอนนี้กลับ101มา เบราว์เซอร์ที่แตกต่างกันอาจมีพฤติกรรมที่แตกต่างกัน ใส่เลขฐานเสมอเพื่อให้ได้ผลลัพธ์ที่เชื่อถือได้
Justin Niessner

@Vivekh - คุณสามารถดูเอกสารล่าสุดได้ที่developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Justin Niessner

เอกสารล่าสุดคือ ES 5 ระบุว่าไม่ควรปฏิบัติต่อ radix เช่นเดียวกับการส่งผ่านใน 10 แต่เตือนให้คุณส่งต่อไปเพื่อรองรับเบราว์เซอร์รุ่นเก่า
Juan Mendes

1
ฉันมักจะใช้parseInt(x, 0)เหตุผลบางอย่างที่ฉันจำไม่ได้ในตอนนี้ .. นี่เท่ากับparseInt(x, 10)ฉันสงสัยว่าตอนนี้ ...
OZZIE

36

เนื่องจากหากคุณมีหมายเลขสตริงเช่น0700และต้องการให้ผลลัพธ์เป็นจำนวนเต็ม700คุณต้องแจ้งparseInt()ว่าเป็นเลขฐานสิบแทนที่จะเป็นฐานแปด

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
หมายเหตุฉันตอบคำถามของคุณเพียงครึ่งเดียว ดูคำจำกัดความที่ดีของผู้อื่นว่าจริง ๆ แล้วรัศมีคืออะไร


1
นอกจากนี้ไบนารี parseInt ('10101', 2)
โจ

1
console.log (parseInt ("0700")); กำลังจะกลับมา // 700 ไม่ใช่ 448
เร

@Naren 8 ปีที่แล้วมันเป็น 448 ในคอนโซลเบราว์เซอร์ใดก็ตามที่ฉันใช้งานสิ่งนี้ใน Chrome สมัยใหม่และในโหนดฉันได้รับ 700 ในวันนี้ แต่บางทีอาจเป็นพฤติกรรมที่ไม่ได้กำหนดในเวลานั้น
Michael Berkowski

@MichaelBerkowski ฉันสังเกตเห็นความแตกต่างเมื่อเร็ว ๆ นี้ - เห็นได้ชัดว่าเลขฐานแปด ES6 เริ่มต้นด้วย0oแทน0
SᴀᴍOnᴇᴌᴀ

7

Radix เป็นฐานของระบบตัวเลข ระบบตัวเลขมีจำนวนไม่ จำกัด แต่ระบบที่คนส่วนใหญ่คุ้นเคยคือฐาน 10 (ฐานสิบ) และฐาน 2 (ไบนารี)

ค่าตัวเลขสามารถตีความได้แตกต่างกันในฐานต่างๆ ตัวอย่างเช่นเลข 10 ในไบนารีสามารถแสดงเป็น 2 ในฐานสิบ

ในกรณีของparseInt()การใช้รัศมีช่วยให้คุณระบุฐานที่จะใช้ โดยค่าเริ่มต้นจะใช้รัศมี 10

อย่างไรก็ตามควรระบุรัศมีเสมอแม้ว่าจะใช้ฐาน 10 ก็ตามให้พิจารณากรณีของ

parseInt("010") // ส่งกลับ 8

เมื่อมองแวบแรกคุณอาจคาดหวังว่าคำสั่งจะส่งกลับ 10 การใช้ radix อย่างชัดเจนจะช่วยหลีกเลี่ยงความสับสน:

parseInt("010", 10) // ผลตอบแทน: 10


4

radix คือเลขฐานของระบบตัวเลข: http://en.wikipedia.org/wiki/Radix

โดยปกติคุณจะต้องระบุรัศมีถ้าคุณต้องการให้แตกต่างจาก 10 โดยเฉพาะอย่างยิ่ง (จากhttp://www.w3schools.com/jsref/jsref_parseInt.asp ):

หากไม่ใส่พารามิเตอร์ radix JavaScript จะถือว่าสิ่งต่อไปนี้:

ถ้าสตริงขึ้นต้นด้วย "0x" เลขฐานสิบหกคือ 16 (เลขฐานสิบหก) ถ้าสตริงขึ้นต้นด้วย "0" เลขฐานแปดจะเป็น 8 (ฐานแปด) คุณลักษณะนี้เลิกใช้แล้วหากสตริงขึ้นต้นด้วยค่าอื่น ๆ รัศมีคือ 10 (ทศนิยม)


2

เพียงเพิ่มข้อมูลเพิ่มเติมที่ตอบคำถามได้อย่างชัดเจน:

หากไม่ได้กำหนด radix หรือ 0 (หรือไม่มี) JavaScript จะถือว่าสิ่งต่อไปนี้:

  • [... ]
  • ถ้าสตริงอินพุตขึ้นต้นด้วย "0" เลขฐานแปด (ฐานแปด) หรือ 10 (ทศนิยม) รัศมีที่เลือกนั้นขึ้นอยู่กับการนำไปใช้งาน ECMAScript 5 ระบุว่ามีการใช้ 10 (ทศนิยม) แต่เบราว์เซอร์บางตัวยังไม่รองรับสิ่งนี้ ด้วยเหตุนี้ให้ระบุรัศมีเสมอเมื่อใช้ parseInt
  • [... ]

ที่มา: MDN parseInt ()


2

มันเป็นเพียงความคิดเห็นของฉัน แต่ความคิดที่ว่า "เราจำเป็นต้องใช้ radix" นั้นล้าสมัยไปอย่างรวดเร็ว ปัญหานี้เกิดขึ้นจริงเมื่อไม่นานมานี้เนื่องจากผู้คนที่อยู่นอกโลกไอทีมักจะไม่ใช้สัญลักษณ์ตัวเลขอื่นที่ไม่ใช่ทศนิยมและมักจะให้ตัวเลขทศนิยมที่เป็นศูนย์เช่น "010" แต่เนื่องจาก ECMAScript 6 เลขฐานแปดใน JS นำหน้าด้วย "0o" และไม่ใช่แค่ "0" เหมือนใน ECMAScript 5 และ 3 ดังนั้นหากคุณไม่กำหนดเป้าหมายตระกูล IE (ซึ่งไม่ใช่สถานการณ์ที่หายากในตอนนี้) คุณสามารถข้าม radix ได้ อย่างปลอดภัย.


1

พารามิเตอร์ radix ใช้เพื่อระบุระบบตัวเลขที่จะใช้ตัวอย่างเช่นเลขฐาน 16 (เลขฐานสิบหก) บ่งชี้ว่าควรแยกวิเคราะห์ตัวเลขในสตริงจากเลขฐานสิบหกเป็นเลขฐานสิบ

หากไม่ใส่พารามิเตอร์ radix JavaScript จะถือว่าสิ่งต่อไปนี้:

ถ้าสตริงขึ้นต้นด้วย "0x" เลขฐานสิบหกคือ 16 (เลขฐานสิบหก)

ถ้าสตริงขึ้นต้นด้วย "0" เลขฐานแปดจะเป็น 8 (ฐานแปด) ฟีเจอร์นี้เลิกใช้งานแล้ว

ถ้าสตริงเริ่มต้นด้วยค่าอื่น ๆ รัศมีคือ 10 (ทศนิยม)

ที่มาW3Schools


1

อะไรคือสิ่งที่สมุฎฐานใน paseInt ()?

parseInt()ฟังก์ชั่นแยกวิเคราะห์สตริงและกลับจำนวนเต็ม มันต้องใช้เวลาอาร์กิวเมนต์ที่สองสำหรับRadixซึ่งระบุฐานของตัวเลขในสตริง Radixสามารถเป็นจำนวนเต็มระหว่างและ236

การเรียกใช้ฟังก์ชันดูเหมือน (ไวยากรณ์):

parseInt(string, radix);

ตัวอย่างบางส่วนเพื่อชี้แจงแนวคิดของรัศมี

ตัวอย่างที่ 1:

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

กี่ตัวแปรบอกว่า "11" ที่อยู่ในระบบเลขฐานสองหรือฐาน 2 ดังนั้นตัวอย่างนี้จะแปลงสตริง "11" เป็นจำนวนเต็ม 3

ตัวอย่างที่ 2:

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

ที่นี่radixจะบอกparseInt()ว่านั่น10011คือเลขฐานสิบหกและด้วยเหตุนี้ในจำนวนเต็มจึงถูกแปลงเป็น65553

โดยทั่วไปเรื่องสั้นสั้นอาร์กิวเมนต์radixจะบอกparseInt()ว่าสตริงที่ส่งผ่านเป็นพารามิเตอร์ที่ 1 เป็นของระบบใดระบบหนึ่ง (ไบนารีเลขฐานสิบหก ฯลฯ ) และจำเป็นต้องแปลงเป็นจำนวนเต็มเป็นผลิตภัณฑ์สุดท้าย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.