Jawaban:
Cara paling sederhana adalah dengan menggunakan Number
fungsi asli :
var x = Number("1000")
Jika itu tidak berhasil untuk Anda, maka ada metode parseInt , unary plus , parseFloat dengan lantai , dan Math.round .
parseInt:
var x = parseInt("1000", 10); // you want to use radix 10
// so you get a decimal number even with a leading 0 and an old browser ([IE8, Firefox 20, Chrome 22 and older][1])
unary plus jika string Anda sudah dalam bentuk bilangan bulat:
var x = +"1000";
jika string Anda atau mungkin float dan Anda menginginkan integer:
var x = Math.floor("1000.01"); //floor automatically converts string to number
atau, jika Anda akan menggunakan Math.floor beberapa kali:
var floor = Math.floor;
var x = floor("1000.01");
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.
var floor = Math.floor;
var x = floor(parseFloat("1000.01"));
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:
var round = Math.round;
var x = round("1000"); //equivalent to round("1000",0)
'4'>>0
dan '4'>>>0
.
parseInt
dan parseFloat
dengan senang hati menerima surat. Hanya Number
mengembalikan NaN
secara konsisten.
NaN
untuk setiap nilai yang bukan integer. Oleh karena itu tidak ada yang sesuai sebagai Number('2.2')
memaksa untuk 2
dan Number('')
memaksa ke 0.
Coba fungsi parseInt:
var number = parseInt("10");
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.
parseInt(string, radix)
Contoh:
var result = parseInt("010", 10) == 10; // Returns true
var result = parseInt("010") == 10; // Returns false
Perhatikan bahwa parseInt
abaikan data buruk setelah memilah apa pun yang valid.
Panduan ini akan diuraikan sebagai 51:
var result = parseInt('51e3daf6-b521-446a-9f5b-a1bb4d8bac36', 10) == 51; // Returns true
parseInt('0asdf', 10)
menghasilkan 0
.
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
var parsed = parseInt("97", 10);
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:
var widgetsSold = parseInt("97,800", 10); // widgetsSold is now 97
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,
var cast = Number("97");
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 seperti 97px
. Karena Anda menginginkan angka primitif daripada objek pembungkus Angka, pastikan Anda tidak meletakkan new
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:
var rounded = Math.floor(Number("97.654")); // other options are Math.ceil, Math.round
var fixed = Number("97.654").toFixed(0); // rounded rather than truncated
var bitwised = Number("97.654")|0; // do not use for large numbers
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.
~~"3000000000.654" === -1294967296
// This is the same as
Number("3000000000.654")|0
"3000000000.654" >>> 0 === 3000000000 // unsigned right shift gives you an extra bit
"300000000000.654" >>> 0 === 3647256576 // but still fails with larger numbers
Untuk bekerja dengan benar dengan angka yang lebih besar, Anda harus menggunakan metode pembulatan
Math.floor("3000000000.654") === 3000000000
// This is the same as
Math.floor(Number("3000000000.654"))
Ingatlah bahwa semua metode ini memahami notasi eksponensial, sehingga 2e2
adalah 200
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).
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 mendapatkan string
(karena .toFixed
metode) alih-alih number
(integer). Jika kita ingin bilangan bulat bulat mungkin lebih baik menggunakan sajaMath.round("97.654");
Meskipun pertanyaan lama, tapi mungkin ini bisa membantu seseorang.
Saya menggunakan cara ini untuk mengkonversi string ke nomor int
var str = "25"; // string
var number = str*1; // number
Jadi, 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
function toNumber(str) {
return str*1;
}
var x = "1000"*1;
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 dari var x = "1000"*1
(<1%), di Firefox sedikit lebih cepat (<1%). Saya memperbarui gambar dan tes di atas
Coba parseInt.
var number = parseInt("10", 10); //number will have value of 10.
Saya mengirim jawaban yang salah di sini, maaf. tetap.
Ini pertanyaan lama, tapi saya suka trik ini:
~~"2.123"; //2
~~"5"; //5
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.
"-2.123" >>> 0; // 4294967294
"2.123" >>> 0; // 2
"-5" >>> 0; // 4294967291
"5" >>> 0; // 5
Waspadalah jika Anda menggunakan parseInt untuk mengubah float dalam notasi ilmiah! Sebagai contoh:
parseInt("5.6e-14")
akan menghasilkan
5
dari pada
0
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:
parseFloat('2.34cms') //Output: 2.34
parseFloat('12.5') //Output: 12.5
parseFloat('012.3') //Output: 12.3
Menggunakan parseInt:
parseInt('2.34cms') //Output: 2
parseInt('12.5') //Output: 12
parseInt('012.3') //Output: 12
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.
Juga sebagai catatan tambahan: Mootools memiliki fungsi toInt () yang digunakan pada sembarang string asli (atau float (atau integer)).
"2".toInt() // 2
"2px".toInt() // 2
2.toInt() // 2
SyntaxError
, Anda harus menggunakan titik ganda, misalnya: 2..toInt();
titik pertama akan mengakhiri representasi Number
literal dan titik kedua adalah pengakses properti.
Silakan lihat contoh di bawah ini. Ini akan membantu menghilangkan keraguan Anda
Example Result
parseInt("4") 4
parseInt("5aaa") 5
parseInt("4.33333") 4
parseInt("aaa"); NaN (means "Not a Number")
dengan menggunakan fungsi parseint. Ini hanya akan memberikan op integer sekarang dan bukan string
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 ...
+
?
parseInt
adanya. Implementasi umum adalah const 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
konversi string
menjadi number
.
> str = '0'
> str - 0
0
> str = '123'
> str - 0
123
> str = '-12'
> str - 0
-12
> str = 'asdf'
> str - 0
NaN
> str = '12.34'
> str - 0
12.34
Berikut adalah dua tautan untuk membandingkan kinerja beberapa cara untuk mengubah string menjadi int
Ada banyak cara dalam JavaScript untuk mengonversi string ke nilai angka ... Semua sederhana dan praktis, pilih cara yang digunakan untuk Anda:
var num = Number("999.5"); //999.5
var num = parseInt("999.5", 10); //999
var num = parseFloat("999.5"); //999.5
var num = +"999.5"; //999.5
Juga setiap operasi Matematika mengubahnya menjadi angka, misalnya ...
var num = "999.5" / 1; //999.5
var num = "999.5" * 1; //999.5
var num = "999.5" - 1 + 1; //999.5
var num = "999.5" - 0; //999.5
var num = Math.floor("999.5"); //999
var num = ~~"999.5"; //999
Cara saya lebih suka menggunakan +
tanda, yang merupakan cara elegan untuk mengkonversi string ke angka di JavaScript.
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:
/*
Examples:
int2str( str2int("test") ) == "test" // true
int2str( str2int("t€st") ) // "t¬st", because "€".charCodeAt(0) is 8364, will be AND'ed with 0xff
Limitations:
max 4 chars, so it fits into an integer
*/
function str2int(the_str) {
var ret = 0;
var len = the_str.length;
if (len >= 1) ret += (the_str.charCodeAt(0) & 0xff) << 0;
if (len >= 2) ret += (the_str.charCodeAt(1) & 0xff) << 8;
if (len >= 3) ret += (the_str.charCodeAt(2) & 0xff) << 16;
if (len >= 4) ret += (the_str.charCodeAt(3) & 0xff) << 24;
return ret;
}
function int2str(the_int) {
var tmp = [
(the_int & 0x000000ff) >> 0,
(the_int & 0x0000ff00) >> 8,
(the_int & 0x00ff0000) >> 16,
(the_int & 0xff000000) >> 24
];
var ret = "";
for (var i=0; i<4; i++) {
if (tmp[i] == 0)
break;
ret += String.fromCharCode(tmp[i]);
}
return ret;
}
int2str
fungsi Anda berhenti jika byte adalah 0, yang bisa menjadi elemen yang sah dalam nilai, jadi if
... 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.
function parseInteger(value) {
if(value === '') return NaN;
const number = Number(value);
return Number.isInteger(number) ? number : NaN;
}
parseInteger("4") // 4
parseInteger("5aaa") // NaN
parseInteger("4.33333") // NaN
parseInteger("aaa"); // NaN
parseInteger
, tidak parseNumber
. Saya kira setiap solusi merupakan solusi karena JS tidak mendukung bilangan bulat dan mengapung sebagai tipe terpisah. Kita bisa kembali null
sebagai ganti NaN
, jika Not A Number menyesatkan.
Inilah solusi termudah
let myNumber = "123" | 0;
Solusi yang lebih mudah
let myNumber = +"123";
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
var num = "fsdfsdf242342";
typeof num => 'string';
var num1 = "12423";
typeof num1 => 'number';
+num1 = > 12423`
var num1 = "12423"; typeof num1;
kembali string
.
Saya hanya menambahkan satu tambah (+) sebelum string dan itu solusinya!
+"052254" //52254
Semoga ini membantu;)
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)
function atoi(array) {
// use exp as (length - i), other option would be to reverse the array.
// multiply a[i] * 10^(exp) and sum
let sum = 0;
for (let i = 0; i < array.length; i++) {
let exp = array.length-(i+1);
let value = array[i] * Math.pow(10,exp);
sum+=value;
}
return sum;
}
function doSth(){
var a = document.getElementById('input').value;
document.getElementById('number').innerHTML = toNumber(a) + 1;
}
function toNumber(str){
return +str;
}
<input id="input" type="text">
<input onclick="doSth()" type="submit">
<span id="number"></span>
Cara teraman untuk memastikan Anda mendapatkan bilangan bulat yang valid:
let integer = (parseInt(value, 10) || 0);
Contoh:
// Example 1 - Invalid value:
let value = null;
let integer = (parseInt(value, 10) || 0);
// => integer = 0
// Example 2 - Valid value:
let value = "1230.42";
let integer = (parseInt(value, 10) || 0);
// => integer = 1230
// Example 3 - Invalid value:
let value = () => { return 412 };
let integer = (parseInt(value, 10) || 0);
// => integer = 0
function parseIntSmarter(str) {
// ParseInt is bad because it returns 22 for "22thisendsintext"
// Number() is returns NaN if it ends in non-numbers, but it returns 0 for empty or whitespace strings.
return isNaN(Number(str)) ? NaN : parseInt(str, 10);
}
Anda dapat menggunakan plus, misalnya =>
var personAge = '24'; var personAge1 = (+ personAge)
maka Anda dapat melihat typeof personAge adalah angka