Number - Sayı

Javascript sayıları 64-Bit uzunluğunda 'Çift Duyarlı Kayan Nokta' olarak IEEE-754 standartlarında tutar. IEEE-754 standardından daha büyük sayılar kullanılırsa hata vermez, 'sonsuz' olarak değerlenir.

Bir sayısal büyüklük tırnak içerisine alınmadan doğrudan yazılırsa number tipinde olur. Bu şekilde matematiksel işlemlerde (toplama, çıkarma vb.) kullanılabilirler. Tırnak içerisinde yazılırsa string olur ve matematiksel işlemlerde kullanılamazlar. Örnek.

let tamSayi = 2023;
let ondalikliSayi = 20.23;

Javascript tamsayılar ve ondalıklı sayılar için number değişkenini kullanır. Farklı tipler olarak ele almaz. Number veri tipi güvenli olarak (2531)-(2^{53}-1) ile (2531)(2^{53}-1) arasında değerler alabilir. Daha büyük veya küçük değerler de alabilir fakat karşılaştırmalarda yanlış sonuçlar üretir. Örneğin 255+12^{55}+1 ile 255+22^{55}+2 birbirlerine eşit mi sorusuna doğru cevabını alırsınız. Değer aralıklarını .MAX_VALUE ve .MIN_VALUE özellikleri ile görüntüleyin.

.MAX_VALUE | .MIN_VALUE | .MAX_SAFE_INTEGER | .MIN_SAFE_INTEGER

alert('Number max değeri: ' + Number.MAX_VALUE);
alert('Number min değeri: ' + Number.MIN_VALUE);

Güvenli tamsayı değer aralıklarını .MAX_SAFE_INTEGER ve .MIN_SAFE_INTEGER özellikleri ile görüntüleyin.

alert(Number.MAX_SAFE_INTEGER); // 9007199254740991
alert(Number.MIN_SAFE_INTEGER); // -9007199254740991

Javascript HexaDecimal (16'lı), Octal (8'li) ve Binary (2'li) sayı sistemlerini kabul eder.

  • HexaDecimal - 16'lı Sayı Sistemi

    • Sayılar 0-9 arasındaki rakamlar ve A-F arasındaki harflerle temsil edilir.

    • 0-9 arası rakamlar kendileri olarak, 10:A, 11:B, 12:C, 13:D, 14:E, 15:F olarak temsil edilir.

    • HexaDecimal sayılar '0x' ile başlayarak yazılır. Örnek: 0xFF

    • HTML Renk kodları bu sistemi kullanır ve gösterimi hashtag sembolü ile başlar. Örnek: #FFFFF

  • Octal - 8'li Sayı Sistemi

    • Sayılar 0-7 arasındaki rakamlarla temsil edilir.

    • Octal sayılar '0o' ile başlayarak yazılır. Örnek: 0o377

  • Binary - 2'li Sayı Sistemi

    • Sayılar 0 ve 1 ile temsil edilir.

    • Binary sayılar '0b' ile başlayarak yazılır. Örnek: 0b11111111

Javascript'te çok sıfırlı sayıları yazarken 'e' harfi kullanılabilir. Örnek olarak:

let nBin = 3e+3; // Üç Bin sayısı e'nin sağında 3 rakamı 3 sıfır anlamına gelir.
let nMilyon = 5e+6; //5 Milyon
let nMilyar = 9.45e+10; //94 Milyar 500 Milyon
let ondaN = 1e-1; //Sağdaki sayı negatif olursa ondalıklara geçer: Onda 1
let milyondaN = 1e-6; //Milyonda 1
let milyardaN = 4.56e-7; // Milyarda 456

Number tipinde iki tane özel değer vardır. Bunlar Infinity ve NaN'dır.

Infinity Değeri

Sonsuz sayıları temsil eder. En büyük sayıdır. Javascript'in standardından daha büyük bir sayı yazarsanız veya bir sayıyı sıfıra bölerseniz Infinity değerini elde edersiniz. Hata almazsınız. Örnek.

let sayi1 = 1/0; // Sıfıra böldük: Infinity
let sayi2 = 1e309; // Max değeri aştık: Infinity
alert(sayi1);
alert(sayi2);

Infinity değeri bir veri tipi değildir. Number veri tipinin özel bir değeridir. Şunları deneyip sonucu görünüz.

let sonsuz = Infinity;
alert(25/sonsuz); // Sonuç: 0
alert(sonsuz/sonsuz); // Sonuç: NaN
alert(sonsuz-sonsuz); // Sonuç: Infinity
alert(sonsuz+sonsuz); // Sonuç: Infinity
alert(sonsuz*sonsuz); // Sonuç: Infinity

NaN Değeri (Not a Number)

Matematiksel işlemi hatalı olan değişkenlerin değeridir. Örneğin bir harf rakama bölünemez. Bu durumda değeri NaN olur. Örnek.

let sayi1 = 'Karakter Dizisi' / 'Başka bir Karakter Dizisi';
alert(sayi1); // NaN
let sayi2 = 'Karakter Dizisi' - 15;
alert(sayi2); // NaN
let sayi3 = 'Karakter Dizisi' * 3;
alert(sayi3); // NaN

Bazı NaN değeri üreten işlemler. Deneyiniz.

let sonsuz = Infinity;
let sifir = 0;
alert(sonsuz/sonsuz); // NaN
alert(sifir/sifir); //NaN
alert(sonsuz*sifir); //NaN

IEEE-754 Sayı Hataları

Birçok dilde kullanılan IEEE-754 standardı sayıları bellekte binary olarak tutar. Bunun sonucunda bazı yuvarlamaları otomatik olarak yapar ve hatalı sonuç döndürür. Örnek.

let sayi1 = 0.1;
let sayi2 = 0.2;
alert(sayi1+sayi2); // Sonuç: 0.30000000000000004

IEEE-754 standardı ondalık kısmı en fazla 16 basamağa kadar doğru verir. Ondalığın 17. basamağında yukarı doğru yuvarlamalar yapar. IEEE-754 varsayılan olarak 1 işaret digit'i, 52 tamsayı basamak digit'i ve 11 ondalık basamak digit'i tutar. Dolayısıyla binary olarak 52 basamaktan daha fazla olan bir tamsayı yazarsanız bunda da belirli bir düzende yukarı doğru yuvarlamalar yapar.

Aşağıda büyük bir tamsayının 2'lik tabandaki binary karşılığı verilmiştir. Sayı binary olarak 54 digit'tir. Yani 54 basamak uzunluğundadır.

9999999999999999=(100011100001101111001001101111110000001111111111111111)29999999999999999 = (100011100001101111001001101111110000001111111111111111)_2

let sayi = 9999999999999999;
alert(sayi); // Çıktı: 10000000000000000 sayısıdr.

Bu standardın 1 digit'i işaret olarak tuttuğunu ifade etmiştik. Bu durum sıfır (0) sayısı için de geçerlidir. Yani sıfır -0 ve +0 olarak iki sayı vardır. Sıfır sayısı iki türlü de binary olarak tamamen sıfırlardan oluştuğu için bu durum bir hataya sebep olmaz. Fakat -0 ve +0 standart olarak kullanılabilir. Aynı durum Infinity için de geçerlidir. Yani -Infinity ve +Infinity olarak kullanılabilir.

Last updated