Numbers

Kategori: Javascript , 31 Ekim 2019 , JanFranco


Javascript'te tüm sayılar tek tiptir, floating point sayılardır. Tüm sayılar floating point sayılar olmasına rağmen biz bunu göremeyiz:


5.000
>>
5
Bir sayı değeri tam sayı olabilir, floating point olabilir, hexadecimal olabilir:


35
>>
35

3.141
>>
3.141

0xFF
>>
255
eX ifadesi 10^x ifadesindeki x değerini temsil eder. Uzun sayılar için kullanışlıdır:


5e2
>>
500

5e-2
>>
0.05
Değerleri sayıya çevirmek için Number() fonksiyonunu kullanabiliriz:


Number('')
>>
0

Number('123')
>>
123
Number() fonksiyonunun yanı sıra parseFloat() fonksiyonunu da kullanabiliriz. Number() fonksiyonuna sayının yanında herhangi bir gereksiz karakter verirsek NaN değerini return alırız. parseFloat() fonksiyonu ise bu tarz karakterleri görmezden gelir:


parseFloat('123.45#')
>>
123.45

Number(123.45#)
>>
NaN
Javascript'te 4 özel sayı değeri vardır: NaN, Infinity, -0, +0. Herhangi bir değer sayıya dönüştürülemiyorsa, sayısal işlemlerde hata varsa veya NaN değer kullanılmışsa NaN değerini alabiliriz:


Number('xyz')
>>
NaN

Math.log(-1)
>>
NaN

NaN + 3
>>
NaN
Bir değerin NaN değer olup olmadığını kontrol etmek için isNaN fonksiyonunu kullanabiliriz. Ancak fonksiyon NaN olmayan değerlerde yanlış gösterimler yapabilir. Bunun için kendi fonksiyonlarımızı oluşturabiliriz:


function myIsNaN (value) {
    return typeof value === 'number' & isNaN(value);
}

function myIsNaN (value) {
    return !== value; // NaN kendisine eşit değildir NaN != NaN  
}
Aritmetik bir hata durumunda veya sayının çok büyük olması durumunuda değişken Infinity değerini alır. 2^1023 değerine kadar olan sayıları gösterebiliriz fakat 2^1024 ve sonrası infinity değerdir. Infinity değeri nötrlemeye çalışırsak NaN değerini elde ederiz. Infinity değeri daha da büyültürsek sonuç değişmez:


Math.pow(2, 1023)
>>
8.98846567431158e+307

Math.pow(2, 1024)
>>
Infinity

3 / 0
>>
Infinity

Infinity - Infinity
>>
NaN

Infinity + Infinity
>>
Infinity
Infinity değerleri karşılaştırma operatörü ile kontrol edebileceğimiz gibi isFinite fonksiyonunu da kullanabiliriz:


isFinite(5)
>>
true

isFinite(Infinity)
>>
false

var x = Infinity;
x === Infinity
>>
true
İki adet 0 değeri olması 0'a nereden yaklaşıldığının öğrenilmesini sağlar. Fakat normal şartlarda +0 ve -0 değerlerini göremeyiz:


+0
>>
0

-0
>>
0

+0 === -0
>>
true
Javascript'te sayılar 64-bittir. Bu diğer dillerdeki double tipinin karşılığıdır. 0-51 bitte kesir, 52-62 bitte üs, 63. bitte işaret bilgisi saklanır. Bir sayının değeri de aşağıdaki formülle hesaplanır:


(-1)^sign x %1.fraction x 2^exponent
Bir kaç sayıyı inceleyelim:


+0			(sign = 0, fraction = 0, exponent = -1023)
-0			(sign = 0, fraction = 0, exponent = +1023)
1 = (-1)^0 x %1.0 x 2^0	(sign = 0, fraction = 0, exponent = 0)
2 = (-1)^0 x %1.0 x 2^1
3 = (-1)^0 x %1.1 x 2^1	(sign = 0, fraction = 2^51, exponent = 0)
0.5 = (-1)^0 x %1.0 x 2^-1
-1 = (-1)^1 x %1.0 x 2^0
Bir sayı değerini tam sayıya çevirmek için Math.floor(), Math.ceil(), Math.round() methodlarını kullanabiliriz.


Math.floor(3.8)
>>
3

Math.floor(-3.8)
>>
-4

Math.ceil(3.2)
>>
4

Math.round(3.2)
>>
3

Math.round(3.5)
>>
4

*** Bu methodlar ile sayıyı yuvarlayarak tam sayıya çeivirdik. ToInteger() fonksiyonu ile sayının kesirli kısmını direk atarak tam sayıya çevirebiliriz:

ToInteger(3.2)
>>
3

ToInteger(3.5)
>>
3
Bit bazında dönüşüm için ToInt32() fonksiyonunu kullanabiliriz. Kesirli kısmı atarak 2^32'ye göre mod alır:


ToInt32(1.001)
>>
1

ToInt32(Math.pow(2, 32)+1)
>>
1
ToInt32(Math.pow(2, 32)-1)
>>
-1
İki değer de sayısal değer ise aritmetik işlemler yapabiliriz:


number1 + number2
number1 - number2
number1 / number2
number % number2
% operatörü diğer dillerdeki gibi mod almaz. Bölümün kalanını verir:


9 % 7
>>
2

-9 % 7
>>
-2
Eşitlik operatörünü kullanmadan sayının değerini artırıp azaltabiliriz:


var number = 3;
number
>>
3

-number
>>
-3

number++
>>
4

++number
>>
4

number
>>
5

number--
>>
4
++ veya -- operatörleri sayının sağ tarafında kullanılırsa sayının değeri değiştikten sonra sayı return edilir. Sol tarafında kullanılırsa sayının değeri değişir fakat değişimden önceki hali return edilir. parseInt() fonksiyonu string değerleri sayısal değere dönüştürür. Ek opsiyonel parametre ile sayı tabanını belirtebiliriz. Eğer tabanı 2 verirsek binary dönüşüm yapmış oluruz:


parseInt('110', 2)
>>
6
Yukarıdak işlemin tam tersini toString() fonksiyonu ile yapabiliriz:


6.toString(2)
>>
'110'
Bit bazında işlemler yapalım. Bir sayının ones' complementini alalım:


(~parseInt('11111111111111111111111111111111', 2)).toString(2)
>>
'0'
Bitwise and, bitise or ve bitwise xor operatörleri ile işlemler yapalım:


(parseInt('11001010', 2) & parseInt('1111', 2)).toString(2)
>>
'1010'

(parseInt('11001010', 2) | parseInt('1111', 2)).toString(2)
>>
'11001111'

(parseInt('11001010', 2) ^ parseInt('1111', 2)).toString(2)
>>
'11000101'
Shifting operasyonları yapalım:


(parseInt('1', 2) << 1).toString(2)
>>
'10'

(parseInt('11111111111111111111111111111110', 2) >> 1).toString(2)
>>
'-1'
Number() sınıfının özelliklerini inceleyelim:


Number.MAX_VALUE
>>
1.7976931348623157e+308

Number.MIN_VALUE
>>
5e-324

Number.NaN
>>
NaN

Number.NEGATIVE_INFINITY
>>
-Infinity

Number.POSITIVE_INFINITY
>>
Infinity
Sayılar için kullanabileceğimiz fonksiyonlar:


isFinite(number)
isNaN(number)
parseFloat(str)
parseInt(str, radix)


Sonraki Yazı: Strings in JavaScript
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın