Menu

String ke Number di TypeScript (dan Number ke String)

Ubah string menjadi number di TypeScript dengan Number(), parseInt(), parseFloat() atau unary +, lihat bagaimana masing-masing menangani input seperti "42px", "" dan "1e3", cek NaN dengan aman, dan ubah number kembali menjadi string.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Untuk mengubah string menjadi number di TypeScript, panggil Number(text). Hasilnya bertipe number, dan nilainya NaN kalau teksnya bukan angka yang valid. Untuk teks dengan karakter tambahan di belakang, seperti "42px", pakai parseInt(text, 10) atau parseFloat(text).

Keempat konversi itu mengembalikan tipe number. TypeScript tidak tahu apakah teksnya valid; string yang tidak valid tetap menghasilkan number, yang nilainya NaN.

Kenapa Kamu Harus Mengonversi

Field form, parameter URL, environment variable, dan isi file datang sebagai string. TypeScript tidak mengizinkanmu memakainya di tempat yang mengharapkan number:

index.ts(3,23): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.

Aritmetika dengan -, * dan / pada string adalah error. + diperbolehkan tetapi menyambung string, jadi "3" + 10 adalah string "310", itulah sebabnya konversi harus dilakukan lebih dulu: Number(quantity) * 10.

Type assertion juga tidak membantu. quantity as number ditolak (TS2352), dan memaksanya lewat as unknown as number hanya membungkam compiler: nilainya tetap string saat runtime.

Number vs parseInt vs parseFloat vs Unary Plus

Keempat fungsi ini sepakat pada input yang bersih dan berbeda pendapat pada semua input lainnya. Tabel ini adalah output nyata masing-masing di Node:

InputNumber(s)+sparseInt(s, 10)parseFloat(s)
"42"42424242
"3.99"3.993.9933.99
"42px"NaNNaN4242
""00NaNNaN
" 3 "3333
"1e3"1000100011000
"0x1F"313100
"1,000"NaNNaN11
"12_000"NaNNaN1212
"abc"NaNNaNNaNNaN

Aturan di balik tabel ini:

  • Number dan unary + identik. Keduanya mengonversi seluruh string setelah memangkas spasi, memahami 1e3 dan hex 0x, dan mengembalikan NaN kalau masih ada sisa karakter. String kosong atau yang hanya berisi spasi menjadi 0.
  • parseInt dan parseFloat membaca dari awal dan berhenti di karakter pertama yang tidak bisa dipakai, jadi "42px" dan "1,000" menghasilkan angka sebagian. String kosong menghasilkan NaN.
  • parseInt membuang bagian pecahan dan tidak memahami eksponen: "1e3" berhenti di e.
  • Pemisah angka (12_000) valid di kode sumber, tetapi tidak di dalam string.

Number adalah pilihan yang lebih ketat untuk memvalidasi input. parseInt dan parseFloat cocok untuk teks yang memang membawa satuan atau akhiran, seperti ukuran CSS.

Menangani Input yang Tidak Valid: NaN

NaN bertipe number, jadi compiler tidak pernah memperingatkanmu tentangnya. Cek hasilnya sendiri, dengan Number.isNaN atau Number.isFinite:

Mengembalikan number | undefined menjadikan kegagalan itu bagian dari tipe, jadi setiap pemanggil harus menanganinya sebelum melakukan aritmetika. Number.isFinite juga menolak Infinity, yang dengan senang hati dikembalikan oleh Number("Infinity").

Hindari isNaN(x) global: fungsi ini mengonversi argumennya lebih dulu, jadi isNaN("abc") bernilai true di JavaScript. Deklarasi TypeScript-nya hanya menerima number, jadi mengirim string adalah error TS2345, sebuah petunjuk untuk memakai Number.isNaN pada nilai yang sudah dikonversi.

String ke Integer

Selalu berikan argumen kedua ke parseInt, yaitu radix: 10 untuk teks desimal. Argumen ini opsional, tetapi mendokumentasikan maksudmu dan penting untuk basis lain. Untuk mendapatkan integer dari string desimal, konversi lalu bulatkan secara eksplisit.

parseInt mengharapkan string: parseInt(12.7) adalah error kompilasi (TS2345), dan itu berguna, karena di JavaScript parseInt pada sebuah number mengubahnya menjadi teks lebih dulu dan memberi jawaban yang salah untuk nilai seperti 0.0000005 (hasilnya 5). Pakai Math.trunc untuk number. Untuk integer di atas Number.MAX_SAFE_INTEGER, BigInt(text) mem-parse nilai lengkapnya (dan melempar SyntaxError pada teks yang tidak valid alih-alih mengembalikan NaN).

Number ke String

String(n), n.toString() maupun `${n}` sama-sama mengubah number menjadi bentuk string terpendeknya. Method pemformatan memberi kendali lebih:

toFixed membulatkan nilai binernya, bukan desimal yang kamu ketik, jadi (1.005).toFixed(2) adalah "1.00": 1.005 disimpan sebagai nilai yang sedikit lebih kecil dari 1,005. Untuk uang, simpan jumlahnya sebagai sen dalam integer atau format dengan Intl.NumberFormat.

String(n) juga berfungsi pada null dan undefined (menghasilkan "null" dan "undefined"), sedangkan n.toString() akan menjadi error kompilasi dengan strict, karena nilainya mungkin tidak ada.

Referensi Cepat

TugasKodeTipe hasil
String ke number, ketatNumber(s) atau +snumber (mungkin NaN)
Integer di awal teksparseInt(s, 10)number (mungkin NaN)
Desimal di awal teksparseFloat(s)number (mungkin NaN)
Cek hasilnyaNumber.isFinite(n), Number.isNaN(n)boolean
Integer besarBigInt(s)bigint
Number ke stringString(n), n.toString(), `${n}`string
Desimal tetapn.toFixed(2)string
Basis lainn.toString(16)string
Pemisah ribuann.toLocaleString("en-US")string

Pertanyaan yang sering diajukan

Bagaimana cara mengubah string menjadi number di TypeScript?

Pakai Number(text). Fungsi ini mengembalikan number: nilainya untuk teks angka yang valid, NaN untuk selain itu, dan 0 untuk string kosong atau yang hanya berisi spasi. Pakai parseInt(text, 10) atau parseFloat(text) kalau teksnya mungkin punya karakter tambahan di belakang seperti "42px".

Bisakah saya melakukan cast string ke number dengan as number?

Tidak. "42" as number adalah error kompilasi (TS2352), dan bahkan kalau dipaksa lewat unknown, assertion hanya mengubah tipe yang dilihat compiler: nilainya tetap string "42" saat runtime. Konversi nilainya dengan Number(), parseInt() atau parseFloat().

Apa perbedaan Number() dan parseInt() di TypeScript?

Number mengonversi seluruh string dan mengembalikan NaN kalau ada bagian yang bukan angka, jadi Number("42px") adalah NaN. parseInt membaca digit dari awal dan berhenti di karakter pertama yang bukan digit, jadi parseInt("42px", 10) adalah 42, dan ia membuang bagian desimal. Number("") adalah 0, sedangkan parseInt("") adalah NaN.

Bagaimana cara mengecek apakah sebuah string adalah angka yang valid?

Konversi lalu uji hasilnya: const n = Number(text); if (text.trim() !== "" && Number.isFinite(n)) { ... }. Pengecekan string kosong itu penting karena Number("") adalah 0. Pakai Number.isNaN, bukan isNaN global, yang lagi pula hanya diterima TypeScript dengan argumen bertipe number.

Bagaimana cara mengubah number menjadi string di TypeScript?

String(n), n.toString() atau template literal `${n}` semuanya memberi hasil yang sama. Pakai n.toFixed(2) untuk jumlah desimal yang tetap, n.toString(16) untuk basis lain, dan n.toLocaleString("en-US") untuk pemisah ribuan.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai