Menu

TypeScript String to Number: String'i Sayıya Çevirme (ve Tersi)

TypeScript'te bir string'i Number(), parseInt(), parseFloat() veya tekli + ile sayıya çevirin; her birinin "42px", "" ve "1e3" gibi girdileri nasıl ele aldığını görün, NaN kontrolünü güvenle yapın ve sayıları tekrar string'e çevirin.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

TypeScript'te bir string'i sayıya çevirmek için Number(text) çağırın. Sonuç number tipindedir ve metin geçerli bir sayı değilse NaN olur. Sonunda karakterler bulunan metinler için, örneğin "42px", parseInt(text, 10) veya parseFloat(text) kullanın.

Dört dönüşümün hepsi number tipini döndürür. TypeScript metnin geçerli olup olmadığını bilmez; geçersiz bir string yine bir number verir ve değeri NaN olur.

Neden Dönüştürmeniz Gerekir

Form alanları, URL parametreleri, ortam değişkenleri ve dosya içerikleri string olarak gelir. TypeScript bunlardan birini sayı beklenen bir yerde kullanmanıza izin vermez:

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.

Bir string üzerinde -, * ve / ile aritmetik bir hatadır. + işlemine izin verilir ama birleştirme yapar, yani "3" + 10 sonucu "310" string'idir; dönüşümün önce gelmesi gerekmesinin nedeni budur: Number(quantity) * 10.

Bir type assertion da işe yaramaz. quantity as number reddedilir (TS2352) ve onu as unknown as number ile zorlamak yalnızca derleyiciyi susturur: değer çalışma zamanında string olarak kalır.

Number, parseInt, parseFloat ve Tekli Artı

Dört fonksiyon temiz girdide aynı sonucu verir, geri kalan her şeyde ayrışır. Bu tablo her birinin Node üzerindeki gerçek çıktısıdır:

GirdiNumber(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

Tablonun arkasındaki kurallar:

  • Number ve tekli + aynıdır. Boşlukları kırptıktan sonra string'in tamamını dönüştürür, 1e3 ve 0x hex yazımını anlar ve geriye bir şey kalırsa NaN döndürür. Boş ya da yalnızca boşluk içeren bir string 0 olur.
  • parseInt ve parseFloat baştan okur ve kullanamadıkları ilk karakterde durur, bu yüzden "42px" ve "1,000" kısmi sayılar verir. Boş bir string NaN olur.
  • parseInt kesirli kısmı atar ve üsleri anlamaz: "1e3" girdisinde e karakterinde durur.
  • Sayısal ayırıcılar (12_000) kaynak kodda geçerlidir, string'lerde değil.

Girdiyi doğrulamak için daha katı seçenek Number fonksiyonudur. parseInt ve parseFloat, CSS boyutları gibi gerçekten bir birim veya ek taşıyan metinlere uygundur.

Geçersiz Girdiyi Ele Almak: NaN

NaN değerinin tipi number olduğu için derleyici onun hakkında asla uyarmaz. Sonucu kendiniz Number.isNaN veya Number.isFinite ile kontrol edin:

number | undefined döndürmek, başarısızlığı tipin bir parçası yapar; böylece her çağıran aritmetik yapmadan önce onu ele almak zorundadır. Number.isFinite, Number("Infinity") fonksiyonunun seve seve döndürdüğü Infinity değerini de reddeder.

Global isNaN(x) fonksiyonundan kaçının: argümanını önce dönüştürür, bu yüzden JavaScript'te isNaN("abc") sonucu true olur. TypeScript'in bildirimi yalnızca bir number kabul eder, bu yüzden bir string vermek TS2345 hatasıdır; bu da zaten dönüştürülmüş bir değer üzerinde Number.isNaN kullanmanız gerektiğine dair bir ipucudur.

String'i Tam Sayıya Çevirmek

parseInt fonksiyonuna her zaman ikinci argümanını, tabanı (radix) verin: ondalık metin için 10. İsteğe bağlıdır ama niyeti belgeler ve başka tabanlar için önemlidir. Ondalıklı bir string'den tam sayı almak için önce dönüştürün, sonra açıkça yuvarlayın.

parseInt bir string bekler: parseInt(12.7) bir derleme hatasıdır (TS2345). Bu işe yarar, çünkü JavaScript'te bir sayı üzerinde çağrılan parseInt onu önce metne çevirir ve 0.0000005 gibi değerlerde yanlış sonuç verir (5 döndürür). Sayılar için Math.trunc kullanın. Number.MAX_SAFE_INTEGER ötesindeki tam sayılar için BigInt(text) tam değeri ayrıştırır (geçersiz metinde NaN döndürmek yerine bir SyntaxError fırlatır).

Sayıyı String'e Çevirmek

String(n), n.toString() ve `${n}` ifadelerinin her biri bir sayıyı en kısa string biçimine çevirir. Biçimlendirme metotları daha fazla kontrol sağlar:

toFixed sizin yazdığınız ondalık sayıyı değil, ikili (binary) değeri yuvarlar; bu yüzden (1.005).toFixed(2) sonucu "1.00" olur: 1.005 aslında 1.005'ten biraz küçük olarak saklanır. Para için tutarları tam sayı kuruş olarak tutun ya da Intl.NumberFormat ile biçimlendirin.

String(n) ayrıca null ve undefined üzerinde de çalışır ("null" ve "undefined" verir); n.toString() ise değer eksik olabileceği için strict altında bir derleme hatası olurdu.

Hızlı Başvuru

GörevKodSonuç tipi
String'den sayıya, katıNumber(s) veya +snumber (belki NaN)
Metnin başındaki tam sayıparseInt(s, 10)number (belki NaN)
Metnin başındaki ondalık sayıparseFloat(s)number (belki NaN)
Sonucu kontrol etmekNumber.isFinite(n), Number.isNaN(n)boolean
Büyük tam sayıBigInt(s)bigint
Sayıdan string'eString(n), n.toString(), `${n}`string
Sabit ondalıkn.toFixed(2)string
Başka tabann.toString(16)string
Binlik ayırıcılarn.toLocaleString("en-US")string

Sıkça Sorulan Sorular

TypeScript'te bir string nasıl sayıya çevrilir?

Number(text) kullanın. Bir number döndürür: geçerli sayısal metin için değerin kendisini, diğer her şey için NaN ve boş ya da yalnızca boşluk içeren bir string için 0. Metnin sonunda "42px" gibi karakterler olabiliyorsa parseInt(text, 10) veya parseFloat(text) kullanın.

Bir string'i as number ile sayıya cast edebilir miyim?

Hayır. "42" as number bir derleme hatasıdır (TS2352) ve unknown üzerinden zorlansa bile bir assertion yalnızca derleyicinin gördüğü tipi değiştirir: çalışma zamanında değer hâlâ "42" string'idir. Değeri Number(), parseInt() veya parseFloat() ile dönüştürün.

TypeScript'te Number() ile parseInt() arasındaki fark nedir?

Number string'in tamamını dönüştürür ve herhangi bir kısmı sayısal değilse NaN döndürür, yani Number("42px") sonucu NaN olur. parseInt baştan rakamları okur ve rakam olmayan ilk karakterde durur, yani parseInt("42px", 10) sonucu 42 olur; ondalık kısmı da atar. Number("") sonucu 0, parseInt("") sonucu ise NaN olur.

Bir string'in geçerli bir sayı olup olmadığını nasıl kontrol ederim?

Dönüştürün ve sonucu test edin: const n = Number(text); if (text.trim() !== "" && Number.isFinite(n)) { ... }. Boş string kontrolü önemlidir, çünkü Number("") sonucu 0 olur. Global isNaN yerine Number.isNaN kullanın; TypeScript global olanı zaten yalnızca number argümanıyla kabul eder.

TypeScript'te bir sayı nasıl string'e çevrilir?

String(n), n.toString() veya bir template literal `${n}` aynı sonucu verir. Sabit sayıda ondalık için n.toFixed(2), başka bir taban için n.toString(16), binlik ayırıcılar için n.toLocaleString("en-US") kullanın.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA