Mengapa kita perlu menggunakan parameter radix saat memanggil parseInt?

91

Apa sebenarnya arti radix? Mengapa kita membutuhkannya?

parseInt(10, radixValue); 
John Cooper
sumber
2
en.wikipedia.org/wiki/Radix
Christophe Roussy

Jawaban:

103

Anda mungkin tidak selalu ingin mengurai bilangan bulat menjadi bilangan basis 10, jadi menyediakan radix memungkinkan Anda menentukan sistem bilangan lain.

Radix adalah jumlah nilai untuk satu digit. Heksadesimal menjadi 16. Oktal menjadi 8, Biner menjadi 2, dan seterusnya ...

Dalam parseInt()fungsinya, ada beberapa hal yang bisa Anda lakukan untuk mengisyaratkan radix tanpa menyediakannya. Ini juga dapat merugikan Anda jika pengguna memasukkan string yang cocok dengan salah satu aturan tetapi tidak bermaksud demikian. Sebagai contoh:

// 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);
Justin Niessner
sumber
2
Jadi parseInt ('0101') menghasilkan 101 atau 65?
Vivekh
7
@Vivekh - Dulu di belakangnya tahun 2011 ketika saya awalnya memposting jawabannya. Pemeriksaan cepat di Google Chrome tampaknya menunjukkan bahwa mereka sudah sedikit berubah. parseInt('0101')sekarang kembali 101. Namun browser yang berbeda mungkin memiliki perilaku yang berbeda. Selalu sertakan radix untuk hasil yang andal.
Justin Niessner
@Vivekh - Anda dapat melihat dokumentasi terbaru di developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Justin Niessner
Dokumentasi terbaru adalah bahwa ES 5 menentukan bahwa tidak ada radix yang diperlakukan sama dengan meneruskan 10, tetapi memperingatkan Anda untuk meneruskannya untuk dukungan browser yang lebih lama.
Juan Mendes
1
Saya selalu menggunakan parseInt(x, 0)untuk beberapa alasan yang tidak dapat saya ingat sekarang .. apakah ini sama dengan yang parseInt(x, 10)saya pikirkan sekarang ...
OZZIE
35

Karena jika Anda memiliki angka string seperti 0700dan ingin outputnya integer 700Anda perlu menginformasikan parseInt()bahwa itu adalah angka desimal daripada oktal.

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
Perhatikan bahwa saya hanya menjawab setengah pertanyaan Anda. Lihat orang lain untuk definisi yang baik tentang apa sebenarnya radix.

Michael Berkowski
sumber
1
Juga, parseInt biner ('10101', 2)
Joe
1
console.log (parseInt ("0700")); kembali // 700 bukan 448.
Naren
@Naren 8 tahun yang lalu itu 448 di konsol browser apa pun yang saya jalankan ini. Di Chrome modern dan di Node, saya juga mendapatkan 700 hari ini, tapi mungkin itu adalah perilaku yang tidak ditentukan pada saat itu.
Michael Berkowski
@MichaelBerkowski Saya memperhatikan perbedaan itu akhir-akhir ini- tampaknya angka oktal ES6 dimulai dengan 0oalih - alih0
Sᴀᴍ Onᴇᴌᴀ
7

Radix adalah dasar dari sistem penomoran. Ada jumlah sistem numerik yang tak terbatas tetapi yang kebanyakan orang kenal adalah basis 10 (desimal) dan basis 2 (biner).

Nilai numerik dapat diinterpretasikan secara berbeda dalam basis yang berbeda. Misalnya, angka 10 dalam biner dapat direpresentasikan sebagai 2 dalam desimal.

Dalam kasus parseInt(), radix memungkinkan Anda untuk menentukan basis yang akan digunakan. Secara default, radix 10 digunakan.

Namun, radix harus selalu ditentukan, bahkan saat menggunakan basis 10. Pertimbangkan kasus

parseInt("010") // Mengembalikan 8

Pada pandangan pertama, Anda mungkin mengharapkan pernyataan tersebut kembali 10. Penggunaan radix secara eksplisit akan membantu menghindari kebingungan:

parseInt("010", 10) // Pengembalian: 10

George Cummins
sumber
4

Radix adalah nomor basis dari sistem bilangan: http://en.wikipedia.org/wiki/Radix

Biasanya, Anda hanya perlu menentukan radix jika Anda menginginkannya berbeda dari 10. Lebih spesifik (dari http://www.w3schools.com/jsref/jsref_parseInt.asp ):

Jika parameter radix dihilangkan, JavaScript mengasumsikan yang berikut:

Jika string dimulai dengan "0x", radix adalah 16 (heksadesimal) Jika string dimulai dengan "0", radix adalah 8 (oktal). Fitur ini tidak digunakan lagi Jika string dimulai dengan nilai lain, radix adalah 10 (desimal)

Mathias Schwarz
sumber
2

Hanya menambahkan beberapa informasi tambahan yang menjawab pertanyaan dengan jelas:

Jika radix tidak ditentukan atau 0 (atau tidak ada), JavaScript mengasumsikan sebagai berikut:

  • [...]
  • Jika string input dimulai dengan "0", radix adalah delapan (oktal) atau 10 (desimal). Tepatnya radix mana yang dipilih bergantung pada implementasi. ECMAScript 5 menetapkan bahwa 10 (desimal) digunakan, tetapi belum semua browser mendukung ini. Untuk alasan ini, selalu tentukan radix saat menggunakan parseInt.
  • [...]

Sumber: MDN parseInt ()

nmoliveira
sumber
2

Ini hanya pendapat saya, tetapi gagasan bahwa "kita perlu menggunakan radix" dengan cepat menjadi usang. Masalahnya sebenarnya sudah terjadi beberapa waktu lalu karena orang-orang di luar dunia IT biasanya tidak menggunakan notasi angka selain desimal dan cukup sering memberikan angka desimal dengan bantalan nol seperti "010". Tetapi karena ECMAScript 6 angka oktal di JS diawali dengan "0o" dan bukan hanya "0" seperti di ECMAScript 5 dan 3. Jadi jika Anda tidak menargetkan keluarga IE (situasi yang tidak jarang sekarang) Anda dapat melewati radix dengan aman.

Konstantin Smolyanin
sumber
1

Parameter radix digunakan untuk menentukan sistem angka mana yang akan digunakan, misalnya radix 16 (heksadesimal) menunjukkan bahwa angka dalam string harus diurai dari angka heksadesimal menjadi angka desimal.

Jika parameter radix dihilangkan, JavaScript mengasumsikan yang berikut:

Jika string diawali dengan "0x", radix-nya adalah 16 (heksadesimal)

Jika string diawali dengan "0", radix-nya adalah 8 (oktal). Fitur ini sudah usang

Jika string dimulai dengan nilai lain, radix-nya adalah 10 (desimal)

Sumber W3Schools

Jeremy Seekamp
sumber
1

Apa itu radix di paseInt ()?

The parseInt()fungsi mem-parsing string dan mengembalikan integer. Dibutuhkan argumen kedua untuk radix , yang menentukan basis nomor dalam string . The radix bisa integer antara 2dan 36.

Panggilan fungsi terlihat seperti (Sintaks):

parseInt(string, radix);

Beberapa contoh untuk memperjelas konsep radix

Contoh 1:

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

The radix variabel mengatakan bahwa "11" adalah dalam sistem biner, atau dasar 2 . Oleh karena itu, contoh ini mengubah string "11" menjadi bilangan bulat 3.

Contoh 2:

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

Di sini radix mengatakan parseInt()bahwa itu 10011adalah bilangan heksadesimal dan karenanya dalam bilangan bulat, itu akan diubah menjadi65553

Pada dasarnya, singkat cerita, argumen radix mengatakan parseInt()bahwa string yang diteruskan sebagai parameter pertama adalah dari sistem tertentu (biner, heksadesimal, dll) dan perlu diubah menjadi integer sebagai produk akhir.

mishsx.dll
sumber