- Konu sahibi
- #1
İlk tercihiniz, metnin tamamının geçerli bir sayı olmasını bekliyorsanız
Burada
Metnin başında veya sonunda boşluk varsa
Ancak metnin içinde sayı dışı karakterler varsa dönüşüm başarısız olur:
Dönüşümden sonra
Bu örnekte çıktı “Geçerli bir sayı girilmedi.” olur. Çünkü
Boş metinler için ayrıca iş kuralı belirleyin.
Bu yöntemler benzer görünse de aynı girdide farklı sonuçlar üretebilir. Seçimi, metnin tamamını mı doğrulamak istediğinize yoksa başındaki sayısal kısmı mı almak istediğinize göre yapın.
Bu işlem yuvarlama yapmaz; ondalık kısmı keser.
Bu davranış CSS değerlerinden sayısal bölümü ayırmak gibi özel durumlarda işe yarayabilir. Fakat bir formdaki yaş, adet veya fiyat alanını doğrularken
HTML form elemanlarının
Kullanıcı alana
Sonuç olarak, metnin tamamının sayı olması gerekiyorsa Number() ile dönüştürüp () veya () ile kontrol edin. Yalnızca tam sayı gerekiyorsa
Number() kullanmaktır. Örneğin Number("42") sonucu 42 olur. Ondalık metinler için Number() veya parseFloat(), tam sayının başındaki rakamları almak için ise parseInt() kullanılabilir. Dönüşümden sonra Number.isNaN() ile sonucun geçerli bir sayı olup olmadığını kontrol edin.Tam ve geçerli bir metni sayıya çevirme
Number(), metnin tamamını sayı olarak yorumlamaya çalışır. Bu nedenle kullanıcıdan alınan değer, form alanındaki içerik veya API yanıtındaki sayısal metin için genellikle en anlaşılır seçenektir.
JavaScript:
const metin = "42";
const sayi = Number(metin);
console.log(sayi); // 42
console.log(typeof sayi); // "number"
Burada
metin değişkenindeki "42" karakter dizisi, sayısal değeri 42 olan bir number değerine dönüşür. typeof sonucunun "number" olması, değişkenin artık metin değil sayı türünde olduğunu gösterir.Metnin başında veya sonunda boşluk varsa
Number() bunu yok sayabilir:
JavaScript:
const sayi = Number(" 18.5 ");
console.log(sayi); // 18.5
Ancak metnin içinde sayı dışı karakterler varsa dönüşüm başarısız olur:
JavaScript:
const sayi = Number("18px");
console.log(sayi); // NaN
NaN, “Not a Number” anlamına gelir. Türü teknik olarak number olsa da geçerli bir sayısal sonuç değildir. Bu yüzden yalnızca typeof sayi === "number" kontrolü yeterli olmaz.Geçersiz değeri kontrol etme
Dönüşümden sonra
Number.isNaN() kullanarak elde edilen sonucun geçersiz olup olmadığını kontrol edin:
JavaScript:
const metin = "18px";
const sayi = Number(metin);
if (Number.isNaN(sayi)) {
console.log("Geçerli bir sayı girilmedi.");
} else {
console.log("Sayı:", sayi);
}
Bu örnekte çıktı “Geçerli bir sayı girilmedi.” olur. Çünkü
Number(), 18px değerinin tamamını sayıya çeviremez. Bu sonuç, kullanıcının kesin olarak yanlış bilgi verdiğini kanıtlamaz; yalnızca mevcut metnin beklenen sayı biçiminde olmadığını gösterir. Giriş alanında para birimi, ölçü birimi veya binlik ayraç kullanılıyorsa önce bu biçimin nasıl temizleneceğine karar vermeniz gerekir.Boş metinler için ayrıca iş kuralı belirleyin.
Number("") sonucu 0 olabilir; bu nedenle boş girişin otomatik olarak sıfır kabul edilmesini istemiyorsanız önce metni kontrol edin:
JavaScript:
const metin = " ";
if (metin.trim() === "") {
console.log("Değer boş bırakılamaz.");
} else {
const sayi = Number(metin);
console.log(sayi);
}
Number, parseInt ve parseFloat arasındaki fark
Bu yöntemler benzer görünse de aynı girdide farklı sonuçlar üretebilir. Seçimi, metnin tamamını mı doğrulamak istediğinize yoksa başındaki sayısal kısmı mı almak istediğinize göre yapın.
| Yöntem | Örnek sonuç | Ne zaman kullanılmalı? |
|---|---|---|
| Number("12.5") | 12.5 | Metnin tamamı geçerli bir sayı olmalıysa |
| parseInt("12.5", 10) | 12 | Tam sayı elde etmek istiyorsanız |
| parseFloat("12.5") | 12.5 | Ondalık sayının başındaki geçerli kısmı almak istiyorsanız |
| +"12.5" | 12.5 | Kısa bir Number dönüşümü gerektiğinde |
parseInt() bir taban parametresiyle kullanılmalıdır. Günlük ondalık sayılar için bu parametre genellikle 10 olarak yazılır:
JavaScript:
const tamSayi = parseInt("24.9", 10);
console.log(tamSayi); // 24
Bu işlem yuvarlama yapmaz; ondalık kısmı keser.
24.9 değerini en yakın tam sayıya yuvarlamak istiyorsanız Math.round() kullanmanız gerekir.
JavaScript:
const sayi = Number("24.9");
const yuvarlanmis = Math.round(sayi);
console.log(yuvarlanmis); // 25
parseInt() ve parseFloat() metnin başındaki uygun kısmı okuyabilir:
JavaScript:
console.log(parseInt("12px", 10)); // 12
console.log(parseFloat("12.5rem")); // 12.5
console.log(Number("12px")); // NaN
Bu davranış CSS değerlerinden sayısal bölümü ayırmak gibi özel durumlarda işe yarayabilir. Fakat bir formdaki yaş, adet veya fiyat alanını doğrularken
parseInt("12abc", 10) sonucunun 12 olması istenmeyen bir durum olabilir. Böyle bir alanda metnin tamamını doğrulamak için Number() kullanmak daha güvenlidir.Form alanındaki değeri sayıya çevirme
HTML form elemanlarının
value özelliği, alan type="number" olsa bile metin olarak gelir. Hesaplama yapmadan önce bu değeri dönüştürün ve geçerliliğini kontrol edin.
HTML:
<input id="adet" type="number" placeholder="Adet girin">
<button id="hesapla">Hesapla</button>
<script>
const adetAlani = document.querySelector("#adet");
const hesaplaButonu = document.querySelector("#hesapla");
hesaplaButonu.addEventListener("click", () => {
const metin = adetAlani.value.trim();
if (metin === "") {
console.log("Adet alanı boş bırakılamaz.");
return;
}
const adet = Number(metin);
if (!Number.isFinite(adet)) {
console.log("Geçerli bir sayı girin.");
return;
}
console.log("Girilen adet:", adet);
});
</script>
Kullanıcı alana
7 yazıp düğmeye bastığında adet değişkeni metin değil, sayısal 7 olur. Alan boşsa işlem durur; sayı biçiminde olmayan veya sonlu olmayan bir değer varsa hesaplama yapılmaz.Number.isFinite() burada NaN, Infinity ve -Infinity gibi hesaplamada kullanılamayacak sonuçları elemek için uygundur. Ancak bu kontrol, sayının iş açısından makul olduğunu kanıtlamaz. Örneğin 999999 teknik olarak geçerli bir sayı olabilir fakat adet alanı için izin verilen aralığın dışında olabilir. Böyle bir durumda ayrıca aralık kontrolü ekleyin:
JavaScript:
if (adet < 1 || adet > 100) {
console.log("Adet 1 ile 100 arasında olmalıdır.");
return;
}
Sonuç olarak, metnin tamamının sayı olması gerekiyorsa Number() ile dönüştürüp () veya () ile kontrol edin. Yalnızca tam sayı gerekiyorsa
parseInt(metin, 10), ondalık metnin başındaki geçerli kısmı almak gerekiyorsa parseFloat(metin) kullanın; dönüşümden sonra iş kuralına uygun aralık kontrolünü de yapın.