Bagaimana cara mengonversi string ke integer dalam JavaScript?
javascript
string
integer
data-conversion
cubuspl42
sumber
sumber
Jawaban:
Cara paling sederhana adalah dengan menggunakan
Number
fungsi asli :Jika itu tidak berhasil untuk Anda, maka ada metode parseInt , unary plus , parseFloat dengan lantai , dan Math.round .
parseInt:
unary plus jika string Anda sudah dalam bentuk bilangan bulat:
jika string Anda atau mungkin float dan Anda menginginkan integer:
atau, jika Anda akan menggunakan Math.floor beberapa kali:
Jika Anda adalah tipe yang lupa memasukkan radix saat Anda memanggil parseInt, Anda dapat menggunakan parseFloat dan bulatkan sesuka Anda. Di sini saya menggunakan lantai.
Menariknya, Math.round (seperti Math.floor) akan melakukan konversi string ke angka, jadi jika Anda ingin angka dibulatkan (atau jika Anda memiliki bilangan bulat dalam string), ini adalah cara yang hebat, mungkin favorit saya:
sumber
'4'>>0
dan'4'>>>0
.parseInt
danparseFloat
dengan senang hati menerima surat. HanyaNumber
mengembalikanNaN
secara konsisten.NaN
untuk setiap nilai yang bukan integer. Oleh karena itu tidak ada yang sesuai sebagaiNumber('2.2')
memaksa untuk2
danNumber('')
memaksa ke 0.Coba fungsi parseInt:
Tapi ada masalah. Jika Anda mencoba mengonversi "010" menggunakan fungsi parseInt, ia mendeteksi sebagai angka oktal, dan akan mengembalikan angka 8. Jadi, Anda perlu menentukan radix (dari 2 hingga 36). Dalam hal ini basis 10.
Contoh:
Perhatikan bahwa
parseInt
abaikan data buruk setelah memilah apa pun yang valid.Panduan ini akan diuraikan sebagai 51:
sumber
parseInt('0asdf', 10)
menghasilkan0
.Ada dua cara utama untuk mengonversi string ke angka dalam javascript. Salah satu caranya adalah menguraikannya dan cara lainnya adalah mengubah tipenya menjadi suatu Angka. Semua trik dalam jawaban lain (misalnya plus unary) melibatkan secara paksa memaksa jenis string ke nomor. Anda juga dapat melakukan hal yang sama secara eksplisit dengan fungsi Angka.
Parsing
parseInt dan parseFloat adalah dua fungsi yang digunakan untuk mem-parsing string ke angka. Parsing akan berhenti secara diam-diam jika mengenai karakter yang tidak dikenali, yang dapat berguna untuk mem-parsing string seperti "92px", tetapi itu juga agak berbahaya, karena itu tidak akan memberi Anda segala jenis kesalahan pada input yang buruk, sebagai gantinya Anda akan kembali NaN kecuali string dimulai dengan angka. Spasi pada awal string diabaikan. Berikut ini contoh melakukan sesuatu yang berbeda dengan yang Anda inginkan, dan tidak memberikan indikasi bahwa ada yang salah:
Ini praktik yang baik untuk selalu menentukan radix sebagai argumen kedua. Di browser yang lebih lama, jika string dimulai dengan 0, itu akan ditafsirkan sebagai oktal jika radix tidak ditentukan yang mengejutkan banyak orang. Perilaku untuk heksadesimal dipicu dengan memiliki string mulai dengan 0x jika tidak ada radix yang ditentukan, misalnya
0xff
. Standar sebenarnya berubah dengan ecmascript 5, jadi browser modern tidak lagi memicu oktal ketika ada 0 di awal jika tidak ada radix yang ditentukan. parseInt memahami radix hingga base 36, dalam hal ini huruf besar dan kecil diperlakukan sebagai setara.Mengubah Jenis String ke Angka
Semua trik lain yang disebutkan di atas yang tidak menggunakan parseInt, melibatkan secara paksa memaksa string menjadi angka. Saya lebih suka melakukan ini secara eksplisit,
Ini memiliki perilaku yang berbeda dengan metode parse (meskipun masih mengabaikan spasi putih). Ini lebih ketat: jika tidak memahami keseluruhan string daripada mengembalikannya
NaN
, jadi Anda tidak dapat menggunakannya untuk string seperti97px
. Karena Anda menginginkan angka primitif daripada objek pembungkus Angka, pastikan Anda tidak meletakkannew
di depan fungsi Angka.Jelas, mengonversi ke Angka memberi Anda nilai yang mungkin float daripada bilangan bulat, jadi jika Anda menginginkan bilangan bulat, Anda perlu memodifikasinya. Ada beberapa cara untuk melakukan ini:
Setiap operator bitwise (di sini saya telah melakukan bitwise atau, tetapi Anda juga bisa melakukan negasi ganda seperti pada jawaban sebelumnya atau bitshift) akan mengkonversi nilai menjadi integer 32bit, dan sebagian besar dari mereka akan dikonversi menjadi integer yang ditandatangani. Perhatikan bahwa ini tidak akan Anda inginkan untuk bilangan bulat besar . Jika integer tidak dapat direpresentasikan dalam 32 bit, itu akan dibungkus.
Untuk bekerja dengan benar dengan angka yang lebih besar, Anda harus menggunakan metode pembulatan
Ingatlah bahwa semua metode ini memahami notasi eksponensial, sehingga
2e2
adalah200
bukan NaN. Juga, Number mengerti "Infinity", sedangkan metode parse tidak.Adat
Tidak mungkin kedua metode ini melakukan apa yang Anda inginkan. Sebagai contoh, biasanya saya ingin kesalahan dilempar jika parsing gagal, dan saya tidak memerlukan dukungan untuk Infinity, eksponensial atau memimpin spasi putih. Bergantung pada usecase Anda, terkadang masuk akal untuk menulis fungsi konversi khusus.
Selalu periksa bahwa output Number atau salah satu metode parse adalah jenis angka yang Anda harapkan. Anda hampir pasti ingin menggunakan
isNaN
untuk memastikan nomornya bukan NaN (biasanya satu-satunya cara Anda mengetahui bahwa parse gagal).sumber
97,8,00
dan serupa atau tidak. Trik sederhana adalah dengan melakukan.replace(/[^0-9]/g, "")
yang akan menghapus semua non digit dari string Anda dan kemudian melakukan konversi sesudahnya. Ini tentu saja akan mengabaikan semua jenis string gila yang Anda mungkin harus kesalahan pada bukan hanya parse ....replace(/[^0-9.]/g, "")
, jika "1.05" akan menjadi "105".var fixed = Number("97.654").toFixed(0); // rounded rather than truncated
, kita mendapatkanstring
(karena.toFixed
metode) alih-alihnumber
(integer). Jika kita ingin bilangan bulat bulat mungkin lebih baik menggunakan sajaMath.round("97.654");
ParseInt () dan + berbeda
sumber
Meskipun pertanyaan lama, tapi mungkin ini bisa membantu seseorang.
Saya menggunakan cara ini untuk mengkonversi string ke nomor
intJadi, ketika mengalikan dengan 1, nilainya tidak berubah, tetapi js secara otomatis mengembalikan angka.
Tetapi seperti yang ditunjukkan di bawah ini, ini harus digunakan jika Anda yakin bahwa itu
str
adalah angka (atau dapat direpresentasikan sebagai angka), jika tidak maka akan mengembalikan NaN - bukan angka.Anda dapat membuat fungsi sederhana untuk digunakan, misalnya
sumber
Tercepat
Uji
Ini sedikit perbandingan kecepatan (hanya Mac Os) ... :)
Untuk chrome 'plus' dan 'mul' adalah yang tercepat (> 700,000,00 op / detik), 'Math.floor' paling lambat. Untuk Firefox 'plus' adalah paling lambat (!) 'Mul' adalah yang tercepat (> 900.000.000 op / detik). Di Safari, 'parseInt' adalah fastes, 'number' paling lambat (tetapi hasil yang hampir serupa,> 13.000.000 <31.000.000). Jadi Safari untuk string pemain ke int lebih dari 10x lebih lambat dari browser lain. Jadi pemenangnya adalah ' mul ' :)
Anda dapat menjalankannya di browser Anda dengan tautan ini https://jsperf.com/js-cast-str-to-number/1
Memperbarui
Saya juga menguji
var x = ~~"1000";
- di Chrome dan Safari sedikit lebih lambat darivar x = "1000"*1
(<1%), di Firefox sedikit lebih cepat (<1%). Saya memperbarui gambar dan tes di atassumber
Coba parseInt.
sumber
Saya mengirim jawaban yang salah di sini, maaf. tetap.
Ini pertanyaan lama, tapi saya suka trik ini:
Negatif bitwise ganda menurunkan apa pun setelah titik desimal DAN mengubahnya menjadi format angka. Saya telah diberitahu bahwa ini sedikit lebih cepat daripada memanggil fungsi dan yang lainnya, tapi saya tidak sepenuhnya yakin.
EDIT: Metode lain yang baru saja saya lihat di sini (pertanyaan tentang operator javascript >>>, yang merupakan shift kanan isian nol) yang menunjukkan bahwa menggeser angka 0 dengan operator ini mengubah angka menjadi uint32 yang bagus jika Anda juga ingin itu tidak ditandatangani . Sekali lagi, ini dikonversi ke integer yang tidak ditandatangani , yang dapat menyebabkan perilaku aneh jika Anda menggunakan nomor yang ditandatangani.
sumber
Waspadalah jika Anda menggunakan parseInt untuk mengubah float dalam notasi ilmiah! Sebagai contoh:
akan menghasilkan
dari pada
sumber
parseInt
tidak akan berfungsi dengan baik untuk float.parseFloat
berfungsi dengan baik dalam hal ini.Untuk mengkonversi String ke Integer, saya sarankan menggunakan parseFloat dan BUKAN parseInt. Inilah alasannya:
Menggunakan parseFloat:
Menggunakan parseInt:
Jadi jika Anda telah memperhatikan parseInt membuang nilai setelah desimal, sedangkan parseFloat memungkinkan Anda bekerja dengan angka floating point dan karenanya lebih cocok jika Anda ingin mempertahankan nilai setelah desimal. Gunakan parseInt jika dan hanya jika Anda yakin Anda menginginkan nilai integer.
sumber
Juga sebagai catatan tambahan: Mootools memiliki fungsi toInt () yang digunakan pada sembarang string asli (atau float (atau integer)).
sumber
SyntaxError
, Anda harus menggunakan titik ganda, misalnya:2..toInt();
titik pertama akan mengakhiri representasiNumber
literal dan titik kedua adalah pengakses properti.Silakan lihat contoh di bawah ini. Ini akan membantu menghilangkan keraguan Anda
dengan menggunakan fungsi parseint. Ini hanya akan memberikan op integer sekarang dan bukan string
sumber
kita bisa menggunakan
+(stringOfNumber)
daripada menggunakanparseInt(stringOfNumber)
Mis:
+("21")
mengembalikan int 21 sepertiparseInt("21")
.kita bisa menggunakan operator "+" unary ini untuk mem-parsing float juga ...
sumber
+
?parseInt
adanya. Implementasi umum adalahconst myNumber = +myNumberAsAString
yang terlihat seperti standar+=
atau=+
operator pada pandangan pertama. Juga Jika digunakan secara tidak benar dapat menyebabkan kesalahan penggabungan. Solusi ini didasarkan pada kenyataan bahwa 0 diasumsikan sebagai sisi kiri ketika tidak ada angka yang diberikan.Coba
str - 0
konversistring
menjadinumber
.Berikut adalah dua tautan untuk membandingkan kinerja beberapa cara untuk mengubah string menjadi int
https://jsperf.com/number-vs-parseint-vs-plus
http://phrogz.net/js/string_to_number.html
sumber
'1'
akan dikonversi1
oleh olehToNumber
, maka1 - 0
akan menjadi1
Ada banyak cara dalam JavaScript untuk mengonversi string ke nilai angka ... Semua sederhana dan praktis, pilih cara yang digunakan untuk Anda:
Juga setiap operasi Matematika mengubahnya menjadi angka, misalnya ...
Cara saya lebih suka menggunakan
+
tanda, yang merupakan cara elegan untuk mengkonversi string ke angka di JavaScript.sumber
Google memberi saya jawaban ini sebagai hasilnya, jadi ...
Saya sebenarnya perlu "menyimpan" string sebagai integer, untuk pengikatan antara C dan JavaScript, jadi saya mengonversi string menjadi nilai integer:
sumber
int2str
fungsi Anda berhenti jika byte adalah 0, yang bisa menjadi elemen yang sah dalam nilai, jadiif
...break
harus dihapus sehingga Anda mendapatkan nilai 4-byte lengkap yang dikembalikan.Menurut pendapat saya, tidak ada jawaban yang mencakup semua kasus tepi karena penguraian float akan menghasilkan kesalahan.
sumber
parseInteger
, tidakparseNumber
. Saya kira setiap solusi merupakan solusi karena JS tidak mendukung bilangan bulat dan mengapung sebagai tipe terpisah. Kita bisa kembalinull
sebagai gantiNaN
, jika Not A Number menyesatkan.Inilah solusi termudah
Solusi yang lebih mudah
sumber
semua hal di atas benar. Pastikan sebelumnya bahwa ini adalah angka dalam sebuah string dengan melakukan "typeot x === 'number'" jika tidak maka akan mengembalikan NaN
sumber
var num1 = "12423"; typeof num1;
kembalistring
.Pilihan lain adalah menggandakan nilai XOR dengan dirinya sendiri:
Ini akan menampilkan:
sumber
Saya hanya menambahkan satu tambah (+) sebelum string dan itu solusinya!
Semoga ini membantu;)
sumber
Menjumlahkan penggandaan digit dengan kekuatan masing-masing sepuluh:
yaitu: 123 = 100 + 20 + 3 = 1 * 100 + 2 + 10 + 3 * 1 = 1 * (10 ^ 2) + 2 * (10 ^ 1) + 3 * (10 ^ 0)
}
sumber
sumber
Saya menggunakan ini
dengan cara ini saya selalu mendapatkan int kembali.
sumber
Cara teraman untuk memastikan Anda mendapatkan bilangan bulat yang valid:
Contoh:
sumber
sumber
Anda dapat menggunakan plus, misalnya =>
var personAge = '24'; var personAge1 = (+ personAge)
maka Anda dapat melihat typeof personAge adalah angka
sumber