Kaldır - JavaScript'te geri kalan tamsayı bölümü? JavaScript Js sayısında kesirli kısım olmadan sayıları yuvarlama yöntemleri.

Bu yazıda sayılara, matematiksel operatörlere, bir sayıyı dizgeye ve tam tersine dönüştürmenin yollarına ve diğer birçok önemli noktaya ayrıntılı olarak bakacağız.

isFinite işlevi

isFinite işlevi, bir argümanın sonlu bir sayı olup olmadığını kontrol etmenizi sağlar.

Bir cevap olarak bu fonksiyon Bağımsız değişken Infinity, -Infinity, NaN ise veya bu özel sayısal değerlerden birine dönüştürülecekse false değerini döndürür. Aksi takdirde bu işlev geri dönecektir doğru.

IsFinite(73); // true isFinite(-1/0); // false isFinite(Sonsuz); // false isFinite(NaN); // false isFinite("Metin"); // YANLIŞ

JavaScript'te global isFinite işlevine ek olarak Number.isFinite yöntemi de vardır. isFinite'ın aksine, argümanı bir sayıya dönüştürülmeye zorlamaz.

IsFinite("73"); // true Number.isFinite("73"); // YANLIŞ

isNaN işlevi

isNaN işlevi, bir argümanın sayı mı olduğunu yoksa bir sayıya mı dönüştürülebileceğini belirlemek için tasarlanmıştır. Eğer öyleyse, isNaN işlevi false değerini döndürür. Aksi takdirde true değerini döndürür.

IsNaN(NaN); //true isNaN("25px"); //doğru çünkü 20px bir sayı değildir: NaN(25,5); //false isNaN("25.5"); //false isNaN(" "); //yanlış çünkü bir boşluk veya birkaç boşluk 0'a dönüştürülür isNaN(null); //yanlış çünkü null, 0'a dönüştürülür isNaN(true); //yanlış çünkü true, 1'e dönüştürülür isNaN(false); //yanlış çünkü yanlış 0'a dönüştürülür

Bu eylemin tür dönüşümü olmadan gerçekleştirilmesi gerekiyorsa Number.isNaN yöntemini kullanın. Bu yöntem dile ECMAScript 6'dan başlayarak tanıtıldı.

Bir dizeyi açıkça bir sayıya nasıl dönüştürebilirim?

Aşağıdaki yöntemleri kullanarak bir dizeyi açıkça bir sayıya dönüştürebilirsiniz:

1. Kullan tekli operatör +, değerin önüne yerleştirilmelidir.

+"7,35"; // 7.35 +"metin"; // NaN

Bu yöntem, \n'nin (satır besleme) yanı sıra satırın başındaki ve sonundaki boşlukları da yok sayar.

+" 7,35 "; //7.35 +"7.35 \n "; //7.35

Kullanma Bu method Boş bir dize veya boşluk ve \n'den oluşan bir dizenin 0 sayısına dönüştürüldüğünü unutmayın. Ayrıca boş veri türünü ve boolean değerlerini de bir sayıya dönüştürür.

Hükümsüz; //0 +doğru; //1 +yanlış; //0 +" "; //0

2. Ayrıştırma işlevi. Bu işlev dönüştürmek için tasarlanmıştır tamsayıya ilişkin argüman. Kullanmaktan farklı olarak tekli operatör +, Bu method bir dizeyi sayıya dönüştürmenize olanak tanır; tüm karakterler sayısal değildir. İlk karakterden başlayarak dizeyi dönüştürmeye başlar. Ve sayısal olmayan bir karakterle karşılaştığında bu fonksiyon çalışmasını durdurur ve ortaya çıkan sayıyı döndürür.

ParseInt("18px"); //18 parseInt("%33,3"); //33

Bu işlev ile çalışabilir farklı sistemler Sayılar (ikili, sekizli, ondalık, onaltılı). Sayı sisteminin tabanı 2 argüman kullanılarak belirtilir.

ParseInt("18 piksel", 10); //18 parseInt("%33,3", 10); //33 parseInt("101",2); //5 parseInt("B5",16); //181

JavaScript'te parseInt işlevine ek olarak Number.parseInt yöntemi de vardır. Bu yöntem parseInt işlevinden farklı değildir ve ECMASCRIPT 2015 (6) spesifikasyonuyla JavaScript'e eklenmiştir.

3. ayrıştırmaFloat işlevi. parseFloat işlevi, argümanı kesirli bir sayıya dönüştürmenize izin vermesi dışında parseInt işlevine benzer.

ParseFloat("%33,3"); //33.3

Ayrıca parseFloat işlevi, parseInt'ten farklı olarak 2 bağımsız değişkene sahip değildir ve bu nedenle dizeyi her zaman bir sayı olarak ele almaya çalışır. ondalık sistem Hesaplaşma.

ParseFloat("3.14"); parseFloat("314e-2"); parseFloat("0.0314E+2");

JavaScript'te parseFloat işlevine ek olarak Number.parseFloat yöntemi de bulunur. Bu yöntem parseFloat işlevinden farklı değildir ve ECMASCRIPT 2015 (6) spesifikasyonuyla JavaScript'e eklenmiştir.

Sayıyı dizeye dönüştürme

toString yöntemini kullanarak bir sayıyı dizeye dönüştürebilirsiniz.

(12.8).toString(); //"12,8"

toString yöntemi ayrıca, sayıyı açıkça bir dizeye dönüştürmeniz gerektiğini dikkate alarak sayı sisteminin tabanını belirtmenize de olanak tanır:

(255).toString(16); //"ff"

Bir değişkenin sayı olup olmadığı nasıl kontrol edilir

Bir değişkenin değerinin bir sayı olup olmadığını aşağıdaki yöntemlerden birini kullanarak belirleyebilirsiniz:

1. isNaN ve isFinite işlevlerini kullanma:

// myVar bir değişkendir if (!isNaN(parseFloat(myVar)) && isFinite(parseFloat(myVar))) ( //myVar bir sayıdır veya ona dönüştürülebilir);

İşlev olarak:

// fonksiyon fonksiyon isNumeric(değer) ( dönüş !isNaN(parseFloat(değer)) && isFinite(parseFloat(değer)); ) // var myVar = "12px" kullanın; console.log(isNumeric(myVar)); //doğru

Bu yöntem, belirtilen değerin bir sayı olup olmadığını veya bire dönüştürülüp dönüştürülemeyeceğini belirlemenizi sağlar. Bu seçenek boş dizeyi, boşluk dizesini, null, Infinity, -Infinity, true ve false'u sayı olarak saymaz.

2. Kullanma operatör tipi ve isFinite, isNaN fonksiyonları:

// değerin sayı olup olmadığını kontrol eden fonksiyon function isNumber(value) ( ​​dönüş typeof value === "number" && isFinite(value) && !isNaN(value); }; // использование функции isNumber isNumber(18); //true // использование функций для проверки текстовых значений isNumber(parseFloat("")); //false isNumber(parseFloat("Infinity")); //false isNumber(parseFloat("12px")); //true !}

Bu işlev, belirtilen değerin Number türünde olup olmadığını ve Infinity, -Infinity ve NaN özel değerlerinden biri olup olmadığını belirler. Eğer öyleyse, o zaman bu işlev true değerini döndürür.

3. ECMAScript 6 Number.isInteger(value) yöntemini kullanma. Bu yöntem, belirtilen değerin bir tamsayı olup olmadığını belirlemenizi sağlar.

Number.isInteger("20"); //yanlış çünkü bu yöntem bir dizeyi bir sayıya dönüştürmez Number.isInteger(20); //doğru çünkü verilen değer bir sayıdır

Çift ve tek sayılar

Bir sayının tek mi yoksa çift mi olduğunu kontrol edebilirsiniz. aşağıdaki işlevler:

// Çift eşlik işlevi için bir sayıyı kontrol etme işlevi isEven(n) ( return n % 2 == 0; ) // Tek eşlik işlevi için bir sayıyı kontrol etme işlevi isOdd(n) ( return Math.abs(n % 2) == 1;

Ancak böyle bir kontrol yapmadan önce belirtilen değerin bir sayı olduğundan emin olmanız önerilir:

Değer = 20; if (Number.isInteger(value)) ( if (isEven(value)) ( console.log("Number " + value.toString() + " - even"); ) )

Javascript'te asal sayılar

kullanarak türettiğimiz bir örneğe bakalım. Javascript basit 2'den 100'e kadar sayılar.

// Bir sayının asal olup olmadığını kontrol eden fonksiyon fonksiyon isPrime(value) ( ​​if (isNaN(value) || !isFinite(value) || değer%1 || değer< 2) return false; var max=Math.floor(Math.sqrt(value)); for (var i = 2; i< = max; i++) { if (value%i==0) { return false; } } return true; } // создать массив, который будет содержать простые числа от 2 до 100 var primaryNumber = ; for (var i = 2; i <= 100; i++) { if(isPrime(i)) primaryNumber.push(i); } // вывести в консоль простые числа от 2 до 100 console.log(primaryNumber);

Javascript'te bir sayıyı yuvarlama

JavaScript'te bir kesri tam sayıya yuvarlamanın çeşitli yolları vardır.

1. Bunun için özel olarak tasarlanmış Math.floor, Math.ceil ve Math.round yöntemlerini kullanmak. Math.floor yöntemi bir kesri en yakın tam sayıya yuvarlar; sadece kesirli kısmı atar. Math.ceil bir kesri en yakın tam sayıya yuvarlar. Math.round, kesirli kısmın değerine bağlı olarak sayıyı yukarı veya aşağı yuvarlar. Kesirli kısım 0,5'ten büyük veya ona eşitse yukarı, aksi halde büküm aşağı olur.

Console.log(Math.floor(7.9)); //7 console.log(Math.ceil(7.2)); //8 console.log(Math.round(7.5)); //8

2. toFixed(precision) yöntemini kullanma. Bu yöntem, bir sayının kesirli kısmını belirli bir duyarlılığa yuvarlar. Yuvarlama sonucu bir dize olarak döndürülür.

Console.log(7.987.toFixed(2)); //"7,99"

Sayının belirtilen hassasiyetini oluşturmak için yeterli ondalık basamak yoksa sıfırlarla doldurulur.

Console.log(7.987.toFixed(5)); //"7,98700"

3. toPrecision(doğruluk) yöntemini kullanma. Bu yöntem, belirli bir hassasiyetle bir sayıyı temsil eder. Aynı zamanda sayının sadece kesirli kısmını değil tamamını da yuvarlayabilir. Sonuca bağlı olarak bu yöntem, elde edilen sayıyı sabit bir noktayla veya üstel biçimde sunabilir.

Console.log((1001).toPrecision(2)); //"1.0e+3" console.log((1001).toPrecision(5)); //"1001.0" console.log((12.4).toPrecision(1)); //"1e+1" console.log((12.4).toPrecision(2)); //"12" console.log((12.4).toPrecision(3)); //"12.4" console.log((12.4).toPrecision(5)); //"12.400"

4. NOT veya OR mantıksal operatörlerini kullanma.

//çift mantıksal olumsuzlama yoluyla console.log(~~7.9); //7 // sıfır ile mantıksal VEYA kullanarak: console.log(7.9^0); //7

Bir sayının tamsayı ve kesirli kısmı

Math.floor() ve parseInt() yöntemlerini kullanarak bir sayının tamsayı kısmını alabilirsiniz:

Console.log(Math.floor(7.21)); // 7 console.log(parseInt(7.21)); // 7

Yüzde (%) operatörünü kullanarak bir sayının kesirli kısmını elde edebilirsiniz. Bu operatör, birinci sayının ikinciye bölünmesinden elde edilecek kalanı döndürür. Bu durumda 2. sayı olarak 1'i kullanmalısınız.

Console.log(7,21%1); // 0,20999999999999996 // 2 ondalık basamağa kadar doğru console.log((7,21%1).toFixed(2)); // "0,21"

Ayrıca kesirli kısım hesaplamalar kullanılarak da elde edilebilir:

Var numarası = 7,21; var kesirNumber = sayı - Math.floor(Math.abs(sayı)); console.log(fractionNumber); // 0,20999999999999996

Sayı bir tam sayıya bölünebilir mi?

Yüzde operatörünü kullanarak bir sayının bir tam sayıya bölünüp bölünemeyeceğini belirleyebilirsiniz:

Var numarası = 9; // sayının 3'e bölümünden kalan 0 ise evet, değilse hayır if (sayı%3==0) ( console.log ("" + sayı + " sayısı 3'e bölünebilir"); ) else ( console.log("Sayı " + sayı + " 3'e bölünemez");

Sayıları biçimlendirme

JavaScript'te toLocaleString() yöntemi, bir sayının çıktısını bölgesel standartlara (işletim sisteminin dil ayarları) uygun olarak biçimlendirmenize olanak tanır.

Örneğin, bir sayıyı sistemde varsayılan olarak yüklü olan bölgesel standartlara uygun olarak biçimlendirelim:

Var numarası = 345,46; console.log(number.toLocaleString()); //"345,46"

Örneğin, sayıyı Rusya'nın bölgesel standartlarına (ru) uygun olarak biçimlendirelim:

Console.log((108.1).toLocaleString("ru-RU")); //"108.1"

Bu yöntem aynı zamanda bir sayıyı para birimi olarak biçimlendirmek için de kullanılabilir:

Console.log((2540.125).toLocaleString("ru-RU",(style:"para birimi", para birimi:"RUB"))); //"2,540,13 ₽" console.log((89.3).toLocaleString("ru-RU",(style:"para birimi", para birimi:"USD")); //"89,30$" console.log((2301,99).toLocaleString("ru-RU",(style:"para birimi", para birimi:"EUR"))); //"2.301,99€"

Bir sayıyı yüzde olarak temsil etmek:

Console.log((0.45).toLocaleString("ru-RU",(style:"yüzde"))); //"%45"

Bir sayıyı rakamlara bölün (useGrouping özelliği):

Console.log((125452.32).toLocaleString("ru-RU",(useGrouping:true))); //"125.452,32"

Ondalık noktadan sonra belirli sayıda basamak (2) içeren bir sayı yazdırın:

Console.log((1240.4564).toLocaleString("ru-RU",(minimumFractionDigits:2, maksimumFractionDigits:2))); //"1.240,46"

Sayıların karşılaştırılması

JavaScript'te sayıları karşılaştırmak için aşağıdaki operatörler kullanılır: == (eşit), != (eşit değil), > (büyüktür),< (меньше), >= (büyük veya eşittir),<= (меньше или равно).

Örneğin iki sayıyı karşılaştıralım:

Console.log(2>3); //false console.log(5>=3); //doğru

Sayıları kesirli kısımlarla karşılaştırırken bu hesaplamalar sırasında ortaya çıkabilecek hataları dikkate almak gerekir.

Örneğin, JavaScript'te sayıların toplamı (0,2 + 0,4) 0,6'ya eşit değildir:

Console.log((0,2+0,4)==0,6); //YANLIŞ

Hatalar, tüm hesaplamaların bilgisayar veya başka bir bilgisayar tarafından yapılması nedeniyle ortaya çıkar. elektronik cihaz 2'li sayı sisteminde üretim yapmaktadır. Onlar. Herhangi bir işlem yapmadan önce bilgisayarın öncelikle ifadede sunulan sayıları 2. sayı sistemine dönüştürmesi gerekir. Ama herhangi bir kesir değil ondalık sayı 2'li sayı sisteminde tam olarak gösterilebilir.

Örneğin 0,25 10 sayısı İkili sistem aynen dönüştürüldü.

0,125 × 2 = 0,25 | 0 0,25 × 2 = 0,5 | 0 0,5 × 2 = 1 | 1 0,125 10 = 0,001 2

Örneğin 0,2 10 sayısı ancak belirli bir doğrulukla 2 sistemine dönüştürülebilir:

0,2 × 2 = 0,4 | 0 0,4 × 2 = 0,8 | 0 0,8 × 2 = 1,6 | 1 0,6 × 2 = 1,2 | 1 0,2 × 2 = 0,4 | 0 0,4 × 2 = 0,8 | 0 0,8 × 2 = 1,6 | 1 0,6 × 2 = 1,2 | 1 0,2 × 2 = 0,4 | 0 0,4 × 2 = 0,8 | 0 0,8 × 2 = 1,6 | 1 0,6 × 2 = 1,2 | 1 ... 0,2 10 = 0,001100110011... 2

Sonuç olarak bu hatalar iki sayının toplamının hesaplanmasını ve karşılaştırma sonuçlarını etkileyecektir. Onlar. Görünüşe göre JavaScript bu girişi aslında şu şekilde görecek:

0.6000000000000001==0.6

Kesirli kısımlara sahip sayıları hesaplarken veya görüntülerken, her zaman bunu yapmak istediğiniz kesinliği belirtmelisiniz.

Örneğin, toFixed() ve toPrecision() yöntemlerini kullanarak 2 ondalık basamağa kadar olan sayıları karşılaştırın:

//yöntem toFixed() console.log((0.2+0.4).toFixed(2)==(0.6).toFixed(2)); //true //method toPrecision() console.log((0.2+0.4).toPrecision(2)==(0.6).toPrecision(2)); //doğru

Temel Matematik İşlemleri

JavaScript'te aşağıdaki matematiksel operatörler mevcuttur: + (toplama), - (çıkarma), * (çarpma), / (bölme), % (modülo), ++ (bir değeri 1 artırma), -- (bir değeri azaltma) 1).

6+3 //9 6-3 //3 6*3 //18 6/3 //2 %63 //0, yani. 6:3=2 => 6-3*2 => geri kalan(0) %52 //1, yani. 5:2=2(.5) => 5-2*2 => geri kalan(1) %7.32 //1.3, yani. 7.3:2=3(.65) => 7.3-2*3 => rest(1.3) //% işleminin sonucunun işareti ilk değerin işaretine eşittir -9%2.5 //-1.5 , yani 9:2.5=3(.6) => 9-2.5*3 => rest(1.5) -9%-2.5 //-1.5, yani. 9:2.5=3(.6) => 9-2.5*3 => rest(1.5) -2%5 //-2, yani. 2:5=0(.4) => 2-5*0 => kalan(2) x = 3; console.log(x++); //3'ün çıktısını alır, ardından 4'ü ayarlar console.log(x); //4 x = 3; console.log(++x); //4'ü ayarlıyoruz ve x = 5 çıktısını alıyoruz; console.log(x--); //5 çıktısını alır, sonra 4'ü ayarlar console.log(x); //4 x = 5; console.log(--x); //4'ü ayarlar ve çıktılar Ek olarak, JavaScript'in kombinasyon operatörleri vardır: x+=y (x=x+y), x-=y (x=x-y), x*=y (x=x*y), x/= y (x=x/y), x%=y (x=x%y). x = 3; y = 6; x+=y; console.log(x); //9 x = 3; y = 6; x-=y; console.log(x); //-3 x = 3; y = 6; x*=y; console.log(x); //18 x = 3; y = 6; x/=y; console.log(x); //0,5 x = 3; y = 6; x%=y; console.log(x); //3

Çoğu zaman JavaScript'teki hesaplamalar tam olarak istediğimiz sonuçları vermez. Elbette sayılarla istediğimizi yapabiliriz - yukarı veya aşağı yuvarlama, aralıkları ayarlama, gereksiz sayıları belirli sayıda ondalık basamağa kadar kesme, bunların hepsi gelecekte bu sayıyla ne yapmak istediğinize bağlıdır.

Yuvarlama neden gereklidir?

JavaScript'in ilginç yönlerinden biri aslında tam sayıları saklamamasıdır; kayan noktalı sayılarla doğrudan çalışırız. Bu, pek çok kesirli değerin sınırlı sayıda ondalık basamakla ifade edilemeyeceği gerçeğiyle birleştiğinde, JavaScript'te şu şekilde sonuçlar elde edebiliriz:

0.1 * 0.2; > 0.020000000000000004 0.3 - 0.1 > 0.19999999999999998
Pratik açıdan bu yanlışlığın bir önemi yok, bizim durumumuzda kentilyon parçalık bir hatadan bahsediyoruz ancak bu bazılarını hayal kırıklığına uğratabilir. Para birimlerini, yüzdeleri veya dosya boyutlarını temsil eden sayılarla çalışırken de biraz tuhaf sonuçlar elde edebiliriz. Bu yanlışlıkları düzeltmek için sonuçları yuvarlayabilmemiz yeterlidir ve ondalık hassasiyetini ayarlamamız yeterlidir.

Yuvarlama sayıları vardır pratik kullanım, belirli bir aralıktaki bir sayıyı değiştiriyor olabiliriz; örneğin, yalnızca ondalık kısımla çalışmak yerine değeri en yakın tam sayıya yuvarlamak istiyoruz.

Ondalık sayıları yuvarlama

Ondalık bir sayıyı kırpmak için toFixed veya toPrecision yöntemini kullanın. Her ikisi de, sonucun sırasıyla kaç tane anlamlı rakam (yani sayıda kullanılan toplam rakam sayısı) veya ondalık basamak (ondalık noktadan sonraki sayı) içermesi gerektiğini belirten tek bir argüman alır:
  1. toFixed() için bir argüman tanımlanmamışsa varsayılan olarak sıfır olacaktır; bu, argümanın ondalık basamağının 0 olduğu anlamına gelir maksimum değer 20'ye eşit.
  2. Kesinlik'e herhangi bir argüman verilmezse sayıya dokunulmaz
RandNum = 6,25 olsun; randNum.toFixed(); > "6" Math.PI.toPrecision(1); > "3" RandNum = 87,335; randNum.toFixed(2); > "87,33" RandNum = 87,337; randNum.toPrecision(3); > "87.3"
Hem toFixed() hem de toPrecision() yöntemleri, bir sayı değil, sonucun dize gösterimini döndürür. Bu, yuvarlatılmış bir değeri RandNum ile toplarken sayıların toplamı yerine dizelerin birleşimini üreteceği anlamına gelir:

RandNum = 6,25 olsun; let yuvarlanmış = RandNum.toFixed(); // "6" console.log(randNum + yuvarlatılmış); > "6.256"
Sonucun sayısal bir veri türü olmasını istiyorsanız parseFloat'ı kullanmanız gerekecektir:

RandNum = 6,25 olsun; let yuvarlanmış = parseFloat(randNum.toFixed(1)); console.log(yuvarlak); > 6.3
Nadir durumlar dışında 5 değerlerinin yuvarlandığını lütfen unutmayın.

toFixed() ve toPrecision() yöntemleri faydalıdır çünkü yalnızca kesirli kısmı kesmekle kalmaz, aynı zamanda para birimiyle çalışırken kullanışlı olan ondalık basamakları da ekleyebilirler:

BütünNum = 1 olsun, DollarCents = BütünNum.toFixed(2); console.log(dolarCents); > "1,00"
Tam sayıların sayısı kesinliğin kendisinden büyükse toPrecision'ın sonucu bilimsel gösterimle üreteceğini unutmayın:

Sayı = 123,435 sayı.toPrecision(2) olsun; > "1.2e+2"

Ondalık Sayılarda Yuvarlama Hatalarından Nasıl Kaçınılır?

Bazı durumlarda toFixed ve toPrecision, 5 değerini aşağı ve yukarı yuvarlar:

numTest = 1,005 olsun; numTest.toFixed(2); > "1,00"
Yukarıdaki hesaplamanın sonucu 1 değil 1,01 olmalıydı. Benzer bir hatanın önüne geçmek istiyorsanız Jack L Moore'un önerdiği ve hesaplama için üstel sayıları kullanan çözümü kullanabiliriz:

Function round(value, ondalık sayılar) ( return Number(Math.round(value+"e"+decimals)+"e-"+decimals); )
Şimdi:

Yuvarlak(1.005,2); > 1,01
Yukarıda gösterilenden daha sağlam bir çözüm istiyorsanız MDN'ye gidebilirsiniz.

Makine epsilon yuvarlama

ES6'da ondalık sayıları yuvarlamak için alternatif bir yöntem tanıtıldı. Makine epsilon yuvarlaması, iki kayan noktalı sayıyı karşılaştırırken makul bir hata payı sağlar. Yuvarlama olmadan karşılaştırmalar aşağıdakine benzer sonuçlar üretebilir:

0,1 + 0,2 === 0,3 > yanlış
Geçerli bir karşılaştırma elde etmek için fonksiyonumuzda Math.EPSILON'u kullanıyoruz:

İşlev epsEqu(x, y) ( Math.abs(x - y) değerini döndürür< Number.EPSILON * Math.max(Math.abs(x), Math.abs(y)); }
Fonksiyon iki argüman alır: Birincisi mevcut hesaplama, ikincisi ise beklenen sonuçtur. İkisinin karşılaştırmasını döndürür:

EpsEqu(0,1 + 0,2; 0,3) > doğru
Tüm modern tarayıcılar zaten ES6 matematik işlevlerini desteklemektedir, ancak IE 11 gibi tarayıcılarda destek istiyorsanız çoklu doldurmaları kullanın.

Kesirli kısmın kırpılması

Yukarıda sunulan tüm yöntemler ondalık sayılara yuvarlanabilir. Bir sayıyı basitçe iki ondalık basamağa kesmek için önce onu 100 ile çarpmanız ve ardından ortaya çıkan sonucu 100'e bölmeniz gerekir:

İşlev truncated(num) ( return Math.trunc(num * 100) / 100; ) truncated(3.1416) > 3,14
Yöntemi herhangi bir sayıda ondalık basamağa uyarlamak istiyorsanız, bit düzeyinde çift olumsuzlamayı kullanabilirsiniz:

İşlev kesildi(num, decimalPlaces) ( let numPowerConverter = Math.pow(10, decimalPlaces); return ~~(num * numPowerConverter)/numPowerConverter; )
Şimdi:

RandInt = 35,874993 olsun; truncated(randInt,3); > 35.874

En yakın sayıya yuvarla

Ondalık bir sayıyı en yakın yukarı veya aşağı sayıya (hangisine en yakınsak) yuvarlamak için Math.round() işlevini kullanın:

Math.round(4.3) > 4 Math.round(4.5) > 5
Lütfen “yarı değeri” olan 0,5’in matematik kurallarına göre yukarıya yuvarlandığını unutmayın.

En yakın tam sayıya yuvarlama

Her zaman aşağı yuvarlamak istiyorsanız Math.floor'u kullanın:

Math.floor(42.23); > 42 Math.floor(36.93); > 36
Lütfen aşağı yuvarlamanın, negatif sayılar da dahil olmak üzere tüm sayılar için işe yaradığını unutmayın. Alt kattaki katlar da dahil olmak üzere (negatif sayıları temsil eden) sonsuz sayıda kata sahip bir gökdelen düşünün. Eğer asansörün en alt katında 2 ile 3 arasındaysanız (ki bu -2,5 değerini temsil eder), Math.floor sizi -3'e götürecektir:

Math.floor(-2,5); > -3
Ancak bu durumdan kaçınmak istiyorsanız tüm modern tarayıcılarda (IE/Edge hariç) desteklenen Math.trunc'u kullanın:

Math.trunc(-41.43); > -41
MDN'de, tarayıcılarda ve IE/Edge'de Math.trunc desteği sağlayacak bir çoklu doldurma bulacaksınız.

En yakın tam sayıya yuvarlama

Öte yandan, her zaman yuvarlama yapmanız gerekiyorsa Math.ceil'i kullanın. Yine sonsuz asansörü hatırlayın: Math.ceil, sayının negatif olup olmadığına bakılmaksızın her zaman "yukarı" gidecektir:

Math.ceil(42.23); > 43 Math.ceil(36.93); > 37 Math.ceil(-36,93); > -36

Gerekli sayıya yukarı/aşağı yuvarlama

5'in en yakın katına yuvarlamak istiyorsak en kolay yol, sayıyı 5'e bölen, yuvarlayan ve ardından aynı sayıyla çarpan bir fonksiyon oluşturmaktır:

RoundTo5(sayı) işlevi ( return Math.round(sayı/5)*5; )
Şimdi:

RoundTo5(11); > 10
Değerinizin katlarına yuvarlamak istiyorsanız, başlangıç ​​değerini ve katını ileten daha genel bir işlev kullanırız:

function roundToMultiple(num, multiple) ( return Math.round(num/multiple)*multiple; )
Şimdi:

İlkSayı = 11 olsun; katı = 10 olsun; roundToMultiple(initialNumber, multiple); > 10;

Bir aralıktaki sayıyı düzeltme

Belirli bir aralıkta yer alan bir x değeri elde etmek istediğimiz birçok durum vardır. Örneğin, 1 ile 100 arasında bir değere ihtiyacımız olabilir ama sonuçta 123 değerini elde ettik. Bunu düzeltmek için min (sayı kümesinin en küçüğünü döndürür) ve max (herhangi bir kümenin en büyüğünü döndürür) kullanabiliriz. sayıların). Örneğimizde aralık 1 ile 100 arasındadır:

LowBound = 1 olsun; yüksekBound = 100 olsun; numInput = 123 olsun; let kelepçelendi = Math.max(lowBound, Math.min(numInput, highBound)); console.log(sabitlenmiş); > 100;
Yine, Daniel X. Moore tarafından önerilen çözümü kullanarak işlemi yeniden kullanabilir ve her şeyi bir fonksiyona sarabiliriz:

Number.prototype.clamp = function(min, max) ( return Math.min(Math.max(this, min), max); );
Şimdi:

NumInput.clamp(düşük Sınır, yüksek Sınır); > 100;

Gauss yuvarlaması

Banker yuvarlaması olarak da bilinen Gauss yuvarlaması, en yakın çift sayıya yuvarlamayı içerir. Bu yuvarlama yöntemi istatistiksel hata olmadan çalışır. En iyi karar Tim Down tarafından önerildi:

Fonksiyon gaussRound(sayı, decimalPlaces) ( let d = decimalPlaces || 0, m = Math.pow(10, d), n = +(d ? sayı * m: sayı).toFixed(8), i = Math.floor (n), f = n - i, e = 1e-8, r = (f > 0,5 - e && f< 0.5 + e) ? ((i % 2 == 0) ? i: i + 1) : Math.round(n); return d ? r / m: r; }
Şimdi:

GaussRound(2,5) > 2 gaussRound(3,5) > 4 gaussRound(2,57,1) > 2,6
CSS'de ondalık sayı:

JavaScript genellikle HTML öğeleri için konumsal eşlemeler oluşturmak amacıyla kullanıldığından, öğelerimiz için ondalık değerler oluşturursak ne olacağını merak ediyor olabilirsiniz:

#kutu ( genişlik: 63.667731993px; )
İyi haber şu ki, modern tarayıcılar blok modelindeki yüzde veya piksel birimleri dahil ondalık değerlere saygı duyacaktır.

Sıralama

Çoğu zaman bazı unsurları sıralamamız gerekir; örneğin, bir dizi oyun kaydımız var ve bunlar, oyuncu sıralamasına göre azalan düzende düzenlenmelidir. Maalesef, standart yöntem sort()'un bazı şaşırtıcı sınırlamaları vardır: Yaygın İngilizce sözcüklerle iyi çalışır ancak sayılar, benzersiz karakterler veya büyük harflerle karşılaştığında hemen bozulur.

Alfabetik olarak sıralama

Bir diziyi alfabetik olarak sıralamak basit bir iş gibi görünüyor:

Meyve = ["balkabağı", "kayısı", "kavun"]; meyve.sort(); > "kayısı", "balkabağı", "kavun"]
Ancak öğelerden biri büyük harf olduğunda bir sorunla karşılaşırız:

Meyve = ["balkabağı", "kayısı", "Kavun"]; meyve.sort(); > "Kavun", "kayısı", "balkabağı"]
Bunun nedeni, varsayılan olarak sıralayıcının Unicode'da temsil edilen ilk karakteri karşılaştırmasıdır. Unicode: benzersiz kod platformdan, programdan, dilden bağımsız olarak herhangi bir sembol için. Örneğin, kod tablosuna bakarsanız, "a" karakterinin U+0061 (onaltılı sistemde 0x61) değerine sahip olduğunu, "C" karakterinin ise Unicode'da daha önce gelen U+0043 (0x43) kodunu taşıdığını görürsünüz. "a" karakterinden daha fazla tablo.

İlk harfleri karışık olan bir diziyi sıralamak için, ya tüm öğeleri geçici olarak küçük harfe dönüştürmemiz ya da bazı argümanlarla localeCompare() yöntemini kullanarak sıralama düzenimizi tanımlamamız gerekir. Kural olarak, böyle bir durumda, tekrarlanan kullanım için hemen bir işlev oluşturmak daha iyidir:

Function alphaSort(arr) ( arr.sort(function (a, b) ( return a.localeCompare(b, "tr", ("hassasiyet": "temel")); )); ) let meyve = ["balkabağı ", "kayısı", "Kavun"]; alfaSort(meyve) >
Dizinin ters alfabetik sıraya göre sıralanmasını istiyorsanız, işlevde a ve b'nin yerlerini değiştirmeniz yeterlidir:

Function alphaSort(arr) ( arr.sort(function (a, b) ( return b.localeCompare(a, "en", ("hassasiyet": "temel")); )); ) let meyve = ["balkabağı ", "kayısı", "Kavun"]; alphaSort(meyve) > ["Kavun", "balkabağı", "kayısı"]
Burada localeCompare'in argümanlarla kullanıldığını belirtmekte fayda var, ayrıca IE11+ tarafından desteklendiğini de hatırlamamız gerekiyor, IE'nin eski sürümleri için onu argüman olmadan ve küçük harflerle kullanabiliriz:

Function caseSort(arr) ( arr.sort(function (a, b) ( return a.toLowerCase().localeCompare(b.toLowerCase()); )); ) let meyve = ["balkabağı", "kayısı", "Kavun"]; caseSort(meyve) > ["kayısı", "balkabağı", "Kavun"]

Sayısal sıralama

Bütün bunlar yukarıda bahsettiğimiz oyun kayıtları dizisi örneği için geçerli değil. Bazı sayısal dizilerde sıralama gayet iyi çalışır ancak bir noktada sonuç tahmin edilemez olabilir:

Yüksek Skorlar = olsun; yüksekScores.sort(); >
Mesele şu ki, sort() yöntemi sözlükbilimsel bir karşılaştırma gerçekleştirir: bu, sayıların bir dizeye dönüştürüleceği ve karşılaştırmaların, o dizenin ilk karakterini Unicode tablosundaki karakterlerin sırasına göre eşleştirerek yeniden yapılacağı anlamına gelir. . Bu nedenle sıralama düzenimizi tekrar tanımlamamız gerekiyor:

Yüksek Skorlar = olsun; highScores.sort(function(a,b) ( return a - b; )); >
Yine sayıları ters sırada sıralamak için fonksiyonda a ve b'nin yerlerini değiştirin.

JSON benzeri bir yapıyı sıralama

Ve son olarak, bir dizi oyun kaydı olarak temsil edilen JSON benzeri bir veri yapısına sahipsek:

Puanlar = [ ( "isim": "Daniel", "puan": 21768 ), ( "isim": "Michael", "puan": 33579 ), ( "isim": "Alison", "puan": 38395 ) ];
ES6+'da ok işlevlerini kullanabilirsiniz:

Skorlar.sort((a, b) => b.skor - a.skor));
Bu desteğe sahip olmayan eski tarayıcılar için:

Scores.sort(function(a, b) ( return a.score - b.score ));
Gördüğünüz gibi JavaScript'te sıralama oldukça belirsiz bir şey, umarım bu örnekler bir şekilde hayatı kolaylaştırır.

Güç işlevleriyle çalışma

Üs alma, başlangıçta bir doğal sayının kendisiyle defalarca çarpılması sonucu tanımlanan bir işlemdir; a'nın karekökü, karesi alındığında a'yı veren sayıdır. Bu fonksiyonları günlük hayatta matematik derslerinde, alan, hacim hesaplamalarında ve hatta fiziksel modellemede sürekli olarak kullanabiliriz.

JavaScript'te güç işlevi Math.pow() olarak temsil edilir ve yeni ES7 standardında yeni bir üstel alma operatörü tanıtıldı - " * * ".

Üs alma

Bir sayıyı n'inci kuvvete yükseltmek için Math.pow() işlevini kullanın; burada ilk argümanın üssü artırılacak sayı, ikinci argüman ise üs olur:

Math.pow(3,2) > 9
Bu gösterim şekli 3 kare veya 3 × 3 anlamına gelir ve sonuç 9 olur. Bir başka örnek de verilebilir elbette:

Math.pow(5,3); > 125
Yani 5'in küpü veya 5×5×5, 125'e eşittir.

ECMAScript 7: sonraki sürüm JavaScript'te prensip olarak yeni önerilen üs alma operatörünü - * * kullanabiliriz, bu gösterim biçimi daha açıklayıcı olabilir:

3 ** 2 > 9
Açık şu an Bu operatöre yönelik destek oldukça sınırlıdır, dolayısıyla kullanılması önerilmez.

Güç işlevi çoğu durumda yararlı olabilir farklı durumlar. Bir saatteki saniye sayısını hesaplayan basit bir örnek: Math.pow (60,2).

Kare ve küp kökler

Math.sqrt() ve Math.cbrt(), Math.pow()'un zıttıdır. Hatırladığımız gibi a'nın karekökü, karesi alındığında a'yı veren sayıdır.

Math.sqrt(9) > 3
Aynı zamanda a'nın küp kökü, küp haline getirildiğinde a'yı veren bir sayıdır.

Math.cbrt(125) > 5
Math.cbrt(), JavaScript spesifikasyonuna daha yeni dahil edildi ve bu nedenle yalnızca modern tarayıcılarda destekleniyor: Chrome 38+, Firefox ve Opera 25+ ve Safari 7.1+. Bunu fark edeceksiniz İnternet Explorer bu listede yok, ancak MDN'de bir çoklu doldurma bulacaksınız.

Örnekler

Elbette tamsayı olmayan değerleri şu işlevlerden birinde kullanabiliriz:

Math.pow(1,25, 2); > 1,5625 Math.cbrt(56,57) > 3,8387991760286138
Negatif bağımsız değişken değerleri kullanıldığında bunun da oldukça işe yaradığını lütfen unutmayın:

Math.pow(-5,2) > 25 Math.pow(10,-2) > 0,01
Ancak bu, karekök için işe yaramaz:

Math.sqrt(-9) > NaN
Matematiksel analizlerden sanal bir sayının negatif sayıların kareköklerini ifade ettiğini biliyoruz. Bu bizi karmaşık sayılarla çalışmak için başka bir tekniğe götürebilir ama bu başka bir hikaye.

Sayıların kare ve küp köklerini bulmak için Math.pow()'daki kesirleri kullanabilirsiniz. Karekök 0,5 üssünü kullanır:

Math.pow(5, 0,5); // = Math.sqrt(5) = 5 ** (1/2) > 2,23606797749979
Ancak kayan nokta değişkenleri nedeniyle doğru sonucu tam olarak tahmin edemezsiniz:

Math.pow(2.23606797749979,2) > 5.000000000000001
Bu gibi durumlarda, sayıdan işaretleri kesmeye veya bir değere yuvarlamaya başvurmanız gerekecektir.

Bazı kişiler, bilinmeyen nedenlerden ötürü, JavaScript'te Math.pow() işlevini, genel olarak sayıların üstel işlevi olan Math.exp() işleviyle karıştırır. Not: içinde ingilizce dili"üs", "üs" olarak çevrilir, bu nedenle, üs için indeks, güç gibi alternatif isimler olmasına rağmen, bunun İngilizce konuşanlar için geçerli olma olasılığı daha yüksektir.

Matematiksel sabitler

JavaScript'te matematikle çalışmak bir dizi yerleşik sabit sayesinde kolaylaştırılmıştır. Bu sabitler Math nesnesinin özellikleridir. Sabitlerin CamelCase gösterimiyle değil, büyük harflerle yazıldığını belirtmekte fayda var.

Math.abs, parseInt, parseFloat

JavaScript'te sayılarla çalışmak göründüğünden çok daha karmaşık olabilir. Elde edilen değerler her zaman beklenen aralıklara girmeyebilir; bazen sonuç hiç de beklediğimiz gibi olmayabilir.

Math.abs()

Math.abs() yöntemi bir sayının mutlak değerini döndürür, bu da bize bir sayının modülü için benzer bir matematiksel fonksiyonu hatırlatır.

yeniVal = -57,64 olsun; Math.abs(yeniVal); > 57.64
Math.abs(0) her zaman sıfır döndürür, ancak -Math.abs(NUM) fonksiyonunun önüne eksi işareti koyarsak her zaman negatif bir değer elde ederiz.

Math.abs(0); > -0

ayrıştırma()

JavaScript'in "15"in bir sayı değil bir dize olduğunu anladığını biliyoruz ve örneğin, CSS özelliklerini JavaScript kullanarak ayrıştırırken veya hazırlıksız bir diziden değer alırken sonuçlarımızın tahmin edilemez olabileceğini biliyoruz. Giriş olarak “17 piksel” olarak temsil edilen bir dize alabiliriz ve bu bizim için alışılmadık bir durum değil. Soru, bu dizenin gerçek bir değere nasıl dönüştürüleceği ve daha sonraki hesaplamalarda nasıl kullanılacağıdır.

Sözdizimi: parseInt(string, radix);

parseInt işlevi, kendisine iletilen ilk bağımsız değişkeni bir dize türüne dönüştürür, yorumlar ve bir tamsayı veya NaN değeri döndürür. Sonuç (NaN değilse) bir tamsayıdır ve belirtilen tabanda bir sayı olarak değerlendirilen ilk argümandır (dize). Örneğin, 10 tabanı onluk tabandan dönüşümü, sekizlik tabandan 8'i, onaltı tabandan 16 vb. dönüşümü gösterir. Taban 10'dan büyükse, 9'dan büyük sayıları temsil etmek için harfler kullanılır. Örneğin, onaltılık sayılar (16 tabanı) için A'dan F'ye kadar olan harfler kullanılır.

Göreceli olarak konuşursak, aşağıdaki değeri alabileceğimiz CSS özellikleriyle çalışmanın bir örneğine bakalım:

eleman = belge.body olsun; let centerPoint = window.getComputedStyle(elem).transformOrigin; > "454 piksel 2087,19 piksel"
Değerleri boşluklara göre bölebiliriz:

Merkezler = centerPoint.split(" "); > ["454 piksel", "2087,19 piksel"]
Ancak her öğe hala bir dizedir, işlevimizi kullanarak bundan kurtulabiliriz:

centerX = parseInt(merkezler, 10); > 454 let centerY = parseInt(merkezler, 10); >2087
Gördüğünüz gibi ikinci argümanla sayının dönüştürüleceği sayı sistemini belirtiyoruz; bu parametre isteğe bağlıdır ancak hangi dizenin girdi olarak alınacağını bilmiyorsanız kullanmanız önerilir.

ayrıştırmaFloat()

Yukarıdaki örnekte muhtemelen ayrıştırmanın kesirli kısmı attığını fark etmişsinizdir. Bizim durumumuzda parseFloat kayan noktalı sayılarla çalışabilir. Yine, bu, CSS'yi ve diğer görevleri ayrıştırırken, özellikle de kayan nokta yüzdeleriyle çalışırken yararlı olabilir.

Sözdizimi: parseFloat(string)

FP = "%33,33333" olsun; console.log(parseFloat(FP)); > 33.33333
parseFloat sözdiziminde ikinci bir argüman bulunmadığını unutmayın.

parseInt() ve parseFloat()'ın son derece kullanışlı işlevler olduğunu anlasak da, bunların hatasız olmadıklarını akılda tutmak önemlidir; bu nedenle, beklenen değer aralığını kontrol etmek ve sonuçta emin olmak için sonucu analiz etmek gerekir. Elde edilen değerlerin doğru olduğunu.
Anonim olarak gönder


Dersimizin bu bölümünde nesneyi tanıyacağız. Sayı sayısal veri türü kapsayıcısında olduğu gibi. Onun gerçek nesnel özüne bugün çok yüzeysel olarak değinilecektir.

Nesne ile aynı Sicim metin satırları, nesne içerir Sayı sayılar içerir. Tıpkı dizeler gibi, yarattığımız sayılar da otomatik olarak bir nesnenin örnekleri haline gelir.

Sayı veri türü

JavaScript'te iki tür sayı vardır: tamsayı ve kayan nokta (diğer dillerde olduğu gibi birçok türe bölünme yoktur tamsayı, uzun, kısa, çift). Kayan nokta sayılarında noktayla ayrılmış tamsayı ve kesirli kısımlar bulunur (yerel ayarlardan bağımsız olarak).

Bu iki sayı türü bağımsız türler değildir ve kendi aralarında özel bir dönüşüm gerektirmezler. Örneğin, 32.5 ile çarpacağız 0.4 , o zaman hemen bir tamsayı elde ederiz 13 , kesir değil 13.0 , bunun bir tamsayı değerine dönüştürülmesi gerekir (diğer dillerde sıklıkla olduğu gibi).

Sayı nesnesi oluşturma

Bir dize gibi, bir sayı da genellikle bir nesne olarak başlatılır Sayı, basit bir atama (dizeden farklı olarak tırnak işareti gerekmez).

var myNum = 21;

Ancak yapıcıyı kullanarak yeni bir nesne de oluşturabilirsiniz:

var myNum = yeni Sayı; benimNum = 21;

Çoğu durumda bu gereksizdir ve hatta zararlıdır. Bölüm 4'te nesnelerle bu tür çalışmaların doğru örneklerine bakacağız.

Sayı gösterimi

Üstel form

Sayılar sıradan veya üstel biçimde temsil edilebilir, örneğin:

2e6 // boşluk yok!

Anlamı: 2 × 10 6

Böyle bir sayıyı belge yöntemiyle çıkarırsak yazmak(), daha sonra olağan gösterimde genişletilmiş bir sayı elde ederiz.

Belge. yazmak(14e12);

Sonuç:

Temel sayı sistemleri

Sayılar ayrıca ondalık, onaltılık ve sekizlik sistemlerde de temsil edilebilir.

Tüm ondalık formdaki sayılar sıfırdan başlamamalıçünkü sıfır, ondalık olmayan sistemler için bir önektir. Sadece 0 sekizlik değerler için önek ve 0x onaltılık için.

Örneğin, 075 bir ondalık sayının sekizlik gösterimidir 61 , A 0x75 ondalık sayının onaltılık gösterimi 117 .

Sekizlik değerler için, sayılar 0 önce 7 , onaltılık alfanümerik seriler için 0123456789ABCDEF. Harfler kullanılabilir herhangi bir kayıtta.

Aritmetik ifadelerde herhangi bir sayı biçimi kullanılabilir ancak sonuç her zaman ondalık sayı olarak temsil edilir.

Sayıların diğer sistemlerde temsili

Nesne hakkında konuşma Sicim, yönteme değindik toString(), herhangi bir nesneyi bir dizeye dönüştürür. Sayıları dizelere dönüştürürken sayı sistemini argüman olarak belirtmeniz önerilir.

Not

Orijinal numara parantez içine alınmalıdır

(sayı). toString(sistem)

sistem 2'den 36'ya kadar herhangi bir değer alabilir.

(157 ).toString(2 ); // ikili gösterim 157, eşittir (53 ).toString(27 ); // egzotik 27 basamaklı gösterim 53, eşittir

Ancak sonuçta ortaya çıkan bu ifadeler dizelerdir. Belirtilen sayı sistemlerinde bunları gerçek sayılar haline getirmek için yöntemin sonucuna ihtiyacınız vardır. toString(sistem) tekrar sayıya dönüştürün. Bu artık yöntemle yapılmıyor, ancak çekirdek işlevi Sayı(nesne). Önümüzdeki derslerden birinde çekirdek işlevlerinden bahsedeceğiz, ancak şimdilik sözdizimine dikkat edin, işlev çağrısına benzer:

var a = 1546; var b = a. toString(2); var c = Sayı(B);

Veya hemen “ikisi bir arada”:

var a = 1546; var b = Sayı(A. toString(2 ));

Not

Orijinal sayı bir değişkene atanmışsa, yöntem çağrılırken parantez içine alınmasına gerek yoktur. toString() .

Number nesnesinin özellikleri

Nesne ile ilgili dersimizde yapıcı ve prototipin genel nesne özelliklerine değineceğiz. Nesne ve şimdi nesnenin belirli özelliklerine dönelim Sayı.

Bu özellikler sadece okumak için yani onları değiştiremeyiz.

MAKSİMUM DEĞER

JavaScript'te işlenebilecek maksimum sayı.

Bakalım bu nasıl bir sayı:

var e = Sayı . MAKSİMUM DEĞER belge. yazmak(e)

Sonuç:

1,7976931348623157e+308

Artı bu durumda bir toplama işareti değil, pozitif bir derecedir, yani 1,7976931348623157 × 10,308

Not

Genellikle sonuçları gerçekten yazılı senaryoları kullanarak gösteririm. Ancak çok fazla kesirli hesaplama sayfanın yüklenmesini yavaşlatabilir ve bu eğitimdeki sonuçların çoğu tabiri caizse elle yazılmıştır.

MIN_VALUE

Bu da buna göre minimum değerdir. Hadi keşfedelim.

var f = Sayı . MIN_VALUE belge. yazmak(F)

Sonuç:

Yani 5×10 -324

Daha önce karşılaştığımız sayısal olmayan bir değer.

Bu özellik, sayısal bir işlem bir şekilde sayısal olmayan bir sonuç ürettiğinde JavaScript tarafından döndürülür.

NEGATIVE_INFINITY, POSITIVE_INFINITY

Bir zamanlar şöyle bir şey düşünmüşler: “Bir geyik, iki geyik, çok geyik.”

JavaScript biraz daha "gelişmiş" sayılır: "bir geyik, iki geyik, üç geyik, ... , 1,7976931348623157 × 10,308 geyik, birçok geyik."

Bu aşkın “çok” özelliği ile ifade edilir POSITIVE_INFINITY.

İşlem tersine çevrilerek bir birim (“bir geyik”) küçük, küçük parçalara bölündüğünde sayılan en küçük parça 5 × 10 -324 parça olacaktır. Daha azı zaten NEGATİF_INFINITY.

Number nesnesinin yöntemleri

Not: Tıpkı toString() yöntemi gibi, diğer tüm yöntemler de orijinal sayının açıkça (değişken olarak değil) temsil edilmesi durumunda parantez içine alınmasını gerektirir.

üstel()

Ondalık noktadan önce bir rakam olacak şekilde, bilimsel gösterimdeki bir sayıyı temsil eden bir dize döndürür.

Sözdizimi:

sayı. üstel(işaret sayısı)

Argüman işaret sayısı ondalık noktadan sonraki yuvarlama hassasiyetini belirtir. Bağımsız değişken atlanırsa, ondalık noktadan sonraki basamak sayısı, değeri temsil etmek için gereken basamak sayısına eşittir.

Örnek:

var myFullNumber = 4659872156831598853654127 ; belge. yazmak(myFullNumber.toExponential(4))

Sonuç:

tamir edildi()

Bağımsız değişkende belirtilen ondalık basamak sayısına yuvarlanmış, sabit noktalı bir sayıyı temsil eden bir dize döndürür.

Sözdizimi:

sayı. tamir edildi(işaret sayısı)

Örnekler:

var myDecimal1 = 46,59872156831598853654127 ; var myDecimal2 = 46; belge. yazmak(myDecimal1.toFixed(1)) belgesi. yazmak("
") belge. yazmak(myDecimal2.toFixed(3))

Sonuçlar:

Bu yöntem bazen çok faydalıdır. Örneğin, son dersteki hantal işlev artık şu şekilde temsil edilebilir:

function anyRootPlus(x, y) ( var srcnum = Math . tecrübe(Matematik. kayıt(x)/y); var sonuç = (srcnum). tamir edildi(3); sonuç döndür; )

Şimdi bunu forma ekleyip test edelim:

Doğru, artık tamsayılarda noktadan sonra üç sıfır da olacak. Ancak sayıların ve dizelerin davranışını bilerek, koşullu operatörlerle nasıl çalışılacağını ve tür dönüştürmeyi bilerek gerekli sayısal "tasarım" yapmak o kadar da zor değil.

toLocaleString()

Ondalık ayırıcılar ve binlik ayırıcılara ilişkin yerel ayarları dikkate alarak sayısal bir nesneyi dize değerine dönüştürür. Ulusal para birimi esas alınır, bu nedenle Rus versiyonunda tüm sayılar, hatta tam sayılar bile iki ondalık basamakla (kopek) gösterilir:

var myDrob = 25.327; var myMnogo = 25635120; var myRoubl = 35; /* virgülleri daha iyi görebilmek için büyütün */ belge. yazmak("

" + benimDrob'um. toLocaleString() + "

" ); belge. yazmak("

" + myMnogo. toLocaleString() + "

" ); belge. yazmak("

" + benimRoubl. toLocaleString() + "

" );

Sonuçlar:

toPrecision()

Belirtilen toplam anlamlı basamak sayısına sahip bir sayıyı temsil eden bir dize döndürür.

Sözdizimi:

sayı. Hassasiyete(miktar Rakamlar)

Argüman:

miktar Rakamlar görüntülenen satırdaki basamak sayısı. Belirtilen miktar orijinal sayıdaki miktardan büyükse ondalık sıfırlar görüntülenir.

Belge. yazmak((354 ).Hassasiyete(8 ))

Sonuç:

Yöntemler toPrecision() Ve toLocaleString() birlikte çalışmıyor Herhangi bir hassasiyetteki sayıların “Rus tasarımı” için kendi fonksiyonunuzu yazmanız gerekecektir. Yazılı işlev, nesnenin ek bir yöntemi haline getirilebilir Sayı, nesneyle zaten benzer bir şey yaptık Tarih(). Nesneyle ilgili derste daha fazla ayrıntı Nesne.

toString()

Bu yöntemi zaten dersin başında ayrıntılı olarak tartışmıştık.

Kendi yönteminizi yaratın

Şimdi bir sayıyı herhangi bir sayıda ondalık basamakla, binlik basamaklar arasında boşluklarla ve ondalık ayırıcı olarak virgülle görüntüleyecek aynı yöntemi oluşturacağız.

Bunu yapmak için, bir nesnenin örneğinden elde edilen dizeleri ve dizileri dönüştürecek oldukça karmaşık bir fonksiyona ihtiyacımız var. Sayı.

Yöntemi deklare edelim:

Number.prototype.toRusString = toRusString

Fonksiyonu oluşturmaya başlamadan önce görevleri formüle edelim.

Öncelikle sayıyı bir dize olarak temsil etmemiz ve ondan tamsayı kısmını, kesirli kısmı ve ayırma noktasını çıkarmamız gerekiyor.

Daha sonra tamsayı kısmına gerekli boşlukları yerleştirin, kesirli kısmı fonksiyona (ve yönteme) argüman olarak belirtilebilecek karakter sayısına yuvarlayın ve noktayı virgülle değiştirin.

Gerekli değişkenleri bildirerek fonksiyona başlayalım.

function to RussianString(prec) ( /* dizeleri dönüştürmek için kullanılan değişkenler */ var a = "" , b = "" , c, d, e;

İleriye baktığımda, dizideki tedirginliklerimizin bir sonucu olarak ondalık kısmın “kesirli” özünü kaybettiğini ve onunla başka bir tamsayı gibi çalışmamız gerektiğini söyleyeceğim. Bununla çalışmak için yöntemi kullanacağız toPrecision() ve fonksiyonumuzun (ve aynı zamanda yöntemimizin) argümanı, özellikle yöntem için değeri ayarlar. toPrecision(). Bu yöntemin minimum parametresi birdir. Ve fonksiyonumuz da sıfıra ihtiyaç duyabilir (tamsayıya yuvarlanırken). Aynı zamanda, nesneyi "parçalamaya" başlamadan önce bile doğru yuvarlamanın işe yaraması gerekir. Bu nedenle, değişkenleri bildirirken hemen bu tuzağı atlayacağız:

/* belirli bir nesne örneğini dizeye dönüştüren bir değişken */ if (prec == 0) var str = this . tamir edildi(0 ).toStringtoString(10 );

Değişkenleri bildirmeye devam ediyoruz.

/* dönüş değeri için değişken */ var no.1; /* “patlamanın” bölümleri için değişkenler */ var intpart, fractpaft, precpart, bölücü, nokta = str. lastIndexOf("." ); /* sayaç */ var i;

Değişken nokta Belirtilen sayıdaki bir dizedeki bir noktanın konumunu bulur. Bu pozisyonda tüm kısmı kesiyoruz ( iç kısım). Sayı tam sayı ise ve noktası yoksa konumu sıfırdan küçük olacaktır. Bu durumda ayırıcı ( bölücü) ve kesirli kısım ( kesir bölümü) boş dizeler olmalıdır. Aksi takdirde, ayırıcıya bir virgül atanır ve daha fazla çalışma için kesirli kısım kesilir:

eğer (nokta< 0 ) { intpart = str; fractpart = "" ; bölücü = "" ;) else (intpart = str. alt dize(0, nokta); fractpart = str. alt dize(nokta + 1 , str. uzunluk); bölücü = "," ;}

Parçanın tamamıyla çalışıyoruz. Boşluklara yalnızca 3'ten fazla karakter varsa ihtiyaç duyulur:

eğer(intpart. uzunluk > 3 ) {

Şimdi aşağıdaki "solitaire" oyununu oynayalım (tüm bunlar koşullu bir ifadenin içinde gerçekleşir):

Üçüzler arasında ters sırada dolaşalım.

Öncelikle bunları bir değişkende toplayalım A herhangi bir ekleme yapmadan, yalnızca elde edilen alt dizenin uzunluğunu hesaplamak için. Sonuçta, eğer toplam rakam sayısı 3'e bölünemiyorsa, solda 1 veya 2 rakamdan oluşan bir kuyruk kaldı ve şimdi bunu alt dizenin uzunluğunu "üçler" ile çıkararak bir alt dize olarak ifade edebiliriz. tüm dizenin uzunluğu (değişken C). Ve önüne aralıksız bir boşluk koyun (bunu daha sonra kaldıracağız). Ne için? Üç haneli gruplar ters sırayla okunduğu için bu ilk kuyruk satırın sonuna yerleştirilmelidir. Yani, eğer 36748521 gibi bir sayıya sahip olsaydık, dizi için bir ayırıcı olacak şekilde her grubun önüne bölünemez bir boşluk koyarak 521,748 36'yı sıralamamız gerekir (sonuçta onları çevirmemiz gerekir) geri ve bu dizi yöntemi kullanılarak yapılabilir tersi()).

İÇİNDE son talimat döngüyü üçlü olarak düzenleyeceğiz ve sonucu bir değişkene yazacağız B.

için (i=intpart. uzunluk-3; i>=0 ; ben-=3 ) /* üçüzleri topla */( a = a + intpart. alt dizi(i, 3); /* soldaki "kuyruğu" bul */ c = " " + intpart. alt dizi(0 , iç bölüm. uzunluk-A. uzunluk); /* ayırıcıları üçerli olarak yerleştir */ b = b + " " + intpart. alt dizi(i, 3);)

Dizeleri eklerken b+c bir diziye dönüştürülmesi gereken bir dize elde ederiz ve sonra bu dizi ters çevrilir ve tekrar bir dizeye dönüştürülür (bunların tümü bir değişkene yazılır) D).

D = (b+c). bölmek(" " ).tersi().toString().yer değiştirmek(/,/G, " " );

Dizi, virgül sınırlayıcılarla birlikte bir dizeye dönüştürülür; bunlara ihtiyacımız yoktur. Bu nedenle, aynı talimatlarda bunları kullanarak kaldırıyoruz. düzenli ifade /,/g, Nerede /,/ virgül için düzenli bir ifade oluşturma ve G Satırda görünen tüm ifade kalıplarını (sadece tüm virgülleri koyun) değiştirmeniz gerektiğini belirten "bayrak". Bunları aynı kırılmayan boşluklarla değiştiriyoruz.

(Hakkında ayrıntılar düzenli ifadeler Kılavuzun son bölümünde ele alınacaktır.)

Şimdi başka bir şeyi temizlememiz gerekiyor (aynı koşullu ifadenin içinde) if (intpart.length > 3)).

Gerçek şu ki, satırımızın başında veya sonunda 6 karakterden oluşan fazladan bölünemez bir boşluk olacaktır: “&”, “n”, “b”, “s”, “p” ve “ ;”. Bu nedenle çöpleri temizleyelim ve sonucu bir değişkene yazalım e:

eğer (d. alt dize(0 , 1 ) == "&" ) e = d. alt dize(6, d. uzunluk-6); aksi takdirde e = d. alt dize(0 , d. uzunluk-6 );

Artık vicdan rahatlığıyla tüm konuyu kapatabiliriz. koşullu operatör ve yaz Alternatif seçenek“üçlere” bölünmesi gerekmeyen kısa bir sayı için.

) else e = intpart;

Yani değişken e sayının tamsayı kısmını saklar, biz ondalık kısımla ilgileneceğiz.

Dikkat! Kesirli kısımla çalışırken (bunun artık bir bütün olarak ele alınması gerekir), şunu hatırlamamız gerekir: prec == 0 işlev zorlanacaktır, o yüzden hemen bağlayalım:

if (prec != 0 ) (

Artık gönül rahatlığıyla çalışabilirsiniz. Ancak şimdi atlayacağımız birkaç "taş" daha var.

Öncelikle kesirli bir parçamız varsa, varsayalım 41 ve yuvarlamayı 3 basamağa ayarladık, ardından yöntem Hassasiyete Kesirli kısmımızı bir tamsayı olarak alırsak çıktıyı alırız 41.0 yani noktayı kaldırmanız gerekiyor.

İkinci olarak, orijinal sayının kesirli kısmı 3 rakamdan fazla ise yöntem Hassasiyete sonucu üstel biçimde üretmeye başlayacaktır. Bununla da mücadele etmeniz gerekecek.

Bu nedenle sonucu üç değişken aracılığıyla “temizleyeceğiz”: ön bölüm, precpart1 Ve precpart2.

Precpart = (Sayı (kesirparçası). Hassasiyete(önceden)). toString(10 )

Şimdi “temizliyoruz”:

/* kesirli kısım varsa */ if (frakpart != "") ( /* noktayı bulup ortadan kaldırın */ precpart1 = precpart. yer değiştirmek(".", "") /* orada üs olup olmadığını kontrol edelim, */ var plus = precpart1.lastIndexOf("e"); /* ve eğer varsa, */ eğer (artı > 0) /* köklerinden çekip çıkarın, */ precpart2 = precpart1. alt dize(0 , artı); /* aksi takdirde */ başka /* hiçbir şeyi değiştirmeyin */ precpart2 = precpart1 ) /* kesirli kısım yoksa */ başka /* sonra sıfırları çıktılıyoruz ve tekrar noktadan kurtuluyoruz */ precpart2 = "," +ön hazırlık. yer değiştirmek("." , "" )

Başlangıçta belirttiğimiz gibi, orijinal sayıda kesirli kısım yoksa virgül de yoktur, bu durumda tekrar koymamız gerekir.

) başka ( /* yani prec hala sıfırsa boş satırları yazdırın */ precpart2 = "" ; bölücü = "" ; }

Ve son akor:

Nr1 = e + bölücü + precpart2; nr1'i döndür; )

Fonksiyonun tamamı:

function to RussianString(prec) ( var a = "" , b = "" , c, d, e; if (prec == 0) var str = this . tamir edildi(0 ).toString(10); else var str = this . toString(10); var no.1; var intpart, fractpaft, precpart, bölücü, nokta = str. lastIndexOf("." ); var ben; eğer (nokta< 0 ) { intpart = str; fractpart = "" ; bölücü = "" ;) else (intpart = str. alt dize(0, nokta); fractpart = str. alt dize(nokta + 1 , str. uzunluk); bölücü = "," ;) eğer (intpart. uzunluk> 3 ) ( for (i=intpart. uzunluk-3; i>=0 ; i-=3 ) ( a = a + intpart. alt dizi(i, 3); c = " " + intpart. alt dizi(0 , iç bölüm. uzunluk-A. uzunluk); b = b + " " + intpart. alt dizi(i, 3);) d = (b+c). bölmek(" " ).tersi().toString().yer değiştirmek(/,/G, " " ); eğer (d. alt dize(0 , 1 ) == "&" ) e = d. alt dize(6, d. uzunluk-6); aksi takdirde e = d. alt dize(0 , d. uzunluk-6); ) else e = intpart; if (prec != 0 ) ( precpart = (Sayı (fraktpart). Hassasiyete(önceden)). toString(10) if (fractpart != "") ( precpart1 = precpart. yer değiştirmek(".", "") var plus = precpart1.lastIndexOf("e"); if (artı > 0) önbölüm2 = önbölüm1. alt dize(0 , artı); else precpart2 = precpart1 ) else precpart2 = "," +ön hazırlık. yer değiştirmek("." , "" )) else ( precpart2 = "" ; bölücü = "" ; ) nr1 = e + bölücü + precpart2; nr1'i döndür; )

Bu fonksiyon artık bir yöntem olarak çağrılabilir.

Var myNumber = 2569843359.6583521 belgesi. yazmak(numaram. to RussianString(3 ))

Sonuç:

Yöntem yapıcısını ve işlevini bir kitaplığa, yani web sayfası kodundan çağrılabilen bir .js dosyasına yerleştirebilirsiniz. Farklı nesneler için yöntemler yazarken, yöntemleri bu nesneler için kitaplık dosyalarında sıralayabilir ve ek yöntemler kullanabilirsiniz.

Bu yazıda sayılara, matematiksel operatörlere, bir sayıyı dizgeye ve tam tersine dönüştürmenin yollarına ve diğer birçok önemli noktaya ayrıntılı olarak bakacağız.

isFinite işlevi

isFinite işlevi, bir argümanın sonlu bir sayı olup olmadığını kontrol etmenizi sağlar.

Yanıt olarak, eğer argüman Infinity, -Infinity, NaN ise veya bu özel sayısal değerlerden birine dönüştürülecekse bu işlev false değerini döndürür. Aksi takdirde bu fonksiyon true değerini döndürecektir.

IsFinite(73); // true isFinite(-1/0); // false isFinite(Sonsuz); // false isFinite(NaN); // false isFinite("Metin"); // YANLIŞ

JavaScript'te global isFinite işlevine ek olarak Number.isFinite yöntemi de vardır. isFinite'ın aksine, argümanı bir sayıya dönüştürülmeye zorlamaz.

IsFinite("73"); // true Number.isFinite("73"); // YANLIŞ

isNaN işlevi

isNaN işlevi, bir argümanın sayı mı olduğunu yoksa bir sayıya mı dönüştürülebileceğini belirlemek için tasarlanmıştır. Eğer öyleyse, isNaN işlevi false değerini döndürür. Aksi takdirde true değerini döndürür.

IsNaN(NaN); //true isNaN("25px"); //doğru çünkü 20px bir sayı değildir: NaN(25,5); //false isNaN("25.5"); //false isNaN(" "); //yanlış çünkü bir boşluk veya birkaç boşluk 0'a dönüştürülür isNaN(null); //yanlış çünkü null, 0'a dönüştürülür isNaN(true); //yanlış çünkü true, 1'e dönüştürülür isNaN(false); //yanlış çünkü yanlış 0'a dönüştürülür

Bu eylemin tür dönüşümü olmadan gerçekleştirilmesi gerekiyorsa Number.isNaN yöntemini kullanın. Bu yöntem dile ECMAScript 6'dan başlayarak tanıtıldı.

Bir dizeyi açıkça bir sayıya nasıl dönüştürebilirim?

Aşağıdaki yöntemleri kullanarak bir dizeyi açıkça bir sayıya dönüştürebilirsiniz:

1. Kullan tekli operatör +, değerin önüne yerleştirilmelidir.

+"7,35"; // 7.35 +"metin"; // NaN

Bu yöntem, \n'nin (satır besleme) yanı sıra satırın başındaki ve sonundaki boşlukları da yok sayar.

+" 7,35 "; //7.35 +"7.35 \n "; //7.35

Bu yöntemi kullanırken boş bir string veya boşluk ve \n'den oluşan bir stringin 0 sayısına dönüştürülmesine dikkat etmeniz gerekmektedir. Ayrıca null veri tipini ve Boolean değerlerini de bir sayıya dönüştürür. .

Hükümsüz; //0 +doğru; //1 +yanlış; //0 +" "; //0

2. Ayrıştırma işlevi. Bu işlev dönüştürmek için tasarlanmıştır tamsayıya ilişkin argüman. Kullanmaktan farklı olarak tekli operatör +, bu yöntem bir dizeyi bir sayıya dönüştürmenize olanak tanır; tüm karakterler sayısal değildir. İlk karakterden başlayarak dizeyi dönüştürmeye başlar. Ve sayısal olmayan bir karakterle karşılaştığında bu fonksiyon çalışmasını durdurur ve ortaya çıkan sayıyı döndürür.

ParseInt("18px"); //18 parseInt("%33,3"); //33

Bu fonksiyon farklı sayı sistemleriyle (ikili, sekizli, ondalık, onaltılı) çalışabilir. Sayı sisteminin tabanı 2 argüman kullanılarak belirtilir.

ParseInt("18 piksel", 10); //18 parseInt("%33,3", 10); //33 parseInt("101",2); //5 parseInt("B5",16); //181

JavaScript'te parseInt işlevine ek olarak Number.parseInt yöntemi de vardır. Bu yöntem parseInt işlevinden farklı değildir ve ECMASCRIPT 2015 (6) spesifikasyonuyla JavaScript'e eklenmiştir.

3. ayrıştırmaFloat işlevi. parseFloat işlevi, argümanı kesirli bir sayıya dönüştürmenize izin vermesi dışında parseInt işlevine benzer.

ParseFloat("%33,3"); //33.3

Ayrıca parseFloat işlevi, parseInt'ten farklı olarak 2 bağımsız değişkene sahip değildir ve bu nedenle dizeyi her zaman ondalık gösterim sisteminde bir sayı olarak ele almaya çalışır.

ParseFloat("3.14"); parseFloat("314e-2"); parseFloat("0.0314E+2");

JavaScript'te parseFloat işlevine ek olarak Number.parseFloat yöntemi de bulunur. Bu yöntem parseFloat işlevinden farklı değildir ve ECMASCRIPT 2015 (6) spesifikasyonuyla JavaScript'e eklenmiştir.

Sayıyı dizeye dönüştürme

toString yöntemini kullanarak bir sayıyı dizeye dönüştürebilirsiniz.

(12.8).toString(); //"12,8"

toString yöntemi ayrıca, sayıyı açıkça bir dizeye dönüştürmeniz gerektiğini dikkate alarak sayı sisteminin tabanını belirtmenize de olanak tanır:

(255).toString(16); //"ff"

Bir değişkenin sayı olup olmadığı nasıl kontrol edilir

Bir değişkenin değerinin bir sayı olup olmadığını aşağıdaki yöntemlerden birini kullanarak belirleyebilirsiniz:

1. isNaN ve isFinite işlevlerini kullanma:

// myVar bir değişkendir if (!isNaN(parseFloat(myVar)) && isFinite(parseFloat(myVar))) ( //myVar bir sayıdır veya ona dönüştürülebilir);

İşlev olarak:

// fonksiyon fonksiyon isNumeric(değer) ( dönüş !isNaN(parseFloat(değer)) && isFinite(parseFloat(değer)); ) // var myVar = "12px" kullanın; console.log(isNumeric(myVar)); //doğru

Bu yöntem, belirtilen değerin bir sayı olup olmadığını veya bire dönüştürülüp dönüştürülemeyeceğini belirlemenizi sağlar. Bu seçenek boş dizeyi, boşluk dizesini, null, Infinity, -Infinity, true ve false'u sayı olarak saymaz.

2. typeof operatörünü ve isFinite, isNaN fonksiyonlarını kullanarak:

// değerin sayı olup olmadığını kontrol eden fonksiyon function isNumber(value) ( ​​dönüş typeof value === "number" && isFinite(value) && !isNaN(value); }; // использование функции isNumber isNumber(18); //true // использование функций для проверки текстовых значений isNumber(parseFloat("")); //false isNumber(parseFloat("Infinity")); //false isNumber(parseFloat("12px")); //true !}

Bu işlev, belirtilen değerin Number türünde olup olmadığını ve Infinity, -Infinity ve NaN özel değerlerinden biri olup olmadığını belirler. Eğer öyleyse, o zaman bu işlev true değerini döndürür.

3. ECMAScript 6 Number.isInteger(value) yöntemini kullanma. Bu yöntem, belirtilen değerin bir tamsayı olup olmadığını belirlemenizi sağlar.

Number.isInteger("20"); //yanlış çünkü bu yöntem bir dizeyi bir sayıya dönüştürmez Number.isInteger(20); //doğru çünkü bu değer bir sayıdır

Çift ve tek sayılar

Aşağıdaki işlevleri kullanarak bir sayının çift mi yoksa tek mi olduğunu kontrol edebilirsiniz:

// Çift eşlik işlevi için bir sayıyı kontrol etme işlevi isEven(n) ( return n % 2 == 0; ) // Tek eşlik işlevi için bir sayıyı kontrol etme işlevi isOdd(n) ( return Math.abs(n % 2) == 1;

Ancak böyle bir kontrol yapmadan önce belirtilen değerin bir sayı olduğundan emin olmanız önerilir:

Değer = 20; if (Number.isInteger(value)) ( if (isEven(value)) ( console.log("Number " + value.toString() + " - even"); ) )

Javascript'te asal sayılar

Javascript kullanarak 2'den 100'e kadar asal sayıları görüntüleyeceğimiz bir örneğe bakalım.

// Bir sayının asal olup olmadığını kontrol eden fonksiyon fonksiyon isPrime(value) ( ​​if (isNaN(value) || !isFinite(value) || değer%1 || değer< 2) return false; var max=Math.floor(Math.sqrt(value)); for (var i = 2; i< = max; i++) { if (value%i==0) { return false; } } return true; } // создать массив, который будет содержать простые числа от 2 до 100 var primaryNumber = ; for (var i = 2; i <= 100; i++) { if(isPrime(i)) primaryNumber.push(i); } // вывести в консоль простые числа от 2 до 100 console.log(primaryNumber);

Javascript'te bir sayıyı yuvarlama

JavaScript'te bir kesri tam sayıya yuvarlamanın çeşitli yolları vardır.

1. Bunun için özel olarak tasarlanmış Math.floor, Math.ceil ve Math.round yöntemlerini kullanmak. Math.floor yöntemi bir kesri en yakın tam sayıya yuvarlar; sadece kesirli kısmı atar. Math.ceil bir kesri en yakın tam sayıya yuvarlar. Math.round, kesirli kısmın değerine bağlı olarak sayıyı yukarı veya aşağı yuvarlar. Kesirli kısım 0,5'ten büyük veya ona eşitse yukarı, aksi halde büküm aşağı olur.

Console.log(Math.floor(7.9)); //7 console.log(Math.ceil(7.2)); //8 console.log(Math.round(7.5)); //8

2. toFixed(precision) yöntemini kullanma. Bu yöntem, bir sayının kesirli kısmını belirli bir duyarlılığa yuvarlar. Yuvarlama sonucu bir dize olarak döndürülür.

Console.log(7.987.toFixed(2)); //"7,99"

Sayının belirtilen hassasiyetini oluşturmak için yeterli ondalık basamak yoksa sıfırlarla doldurulur.

Console.log(7.987.toFixed(5)); //"7,98700"

3. toPrecision(doğruluk) yöntemini kullanma. Bu yöntem, belirli bir hassasiyetle bir sayıyı temsil eder. Aynı zamanda sayının sadece kesirli kısmını değil tamamını da yuvarlayabilir. Sonuca bağlı olarak bu yöntem, elde edilen sayıyı sabit bir noktayla veya üstel biçimde sunabilir.

Console.log((1001).toPrecision(2)); //"1.0e+3" console.log((1001).toPrecision(5)); //"1001.0" console.log((12.4).toPrecision(1)); //"1e+1" console.log((12.4).toPrecision(2)); //"12" console.log((12.4).toPrecision(3)); //"12.4" console.log((12.4).toPrecision(5)); //"12.400"

4. NOT veya OR mantıksal operatörlerini kullanma.

//çift mantıksal olumsuzlama yoluyla console.log(~~7.9); //7 // sıfır ile mantıksal VEYA kullanarak: console.log(7.9^0); //7

Bir sayının tamsayı ve kesirli kısmı

Math.floor() ve parseInt() yöntemlerini kullanarak bir sayının tamsayı kısmını alabilirsiniz:

Console.log(Math.floor(7.21)); // 7 console.log(parseInt(7.21)); // 7

Yüzde (%) operatörünü kullanarak bir sayının kesirli kısmını elde edebilirsiniz. Bu operatör, birinci sayının ikinciye bölünmesinden elde edilecek kalanı döndürür. Bu durumda 2. sayı olarak 1'i kullanmalısınız.

Console.log(7,21%1); // 0,20999999999999996 // 2 ondalık basamağa kadar doğru console.log((7,21%1).toFixed(2)); // "0,21"

Ayrıca kesirli kısım hesaplamalar kullanılarak da elde edilebilir:

Var numarası = 7,21; var kesirNumber = sayı - Math.floor(Math.abs(sayı)); console.log(fractionNumber); // 0,20999999999999996

Sayı bir tam sayıya bölünebilir mi?

Yüzde operatörünü kullanarak bir sayının bir tam sayıya bölünüp bölünemeyeceğini belirleyebilirsiniz:

Var numarası = 9; // sayının 3'e bölümünden kalan 0 ise evet, değilse hayır if (sayı%3==0) ( console.log ("" + sayı + " sayısı 3'e bölünebilir"); ) else ( console.log("Sayı " + sayı + " 3'e bölünemez");

Sayıları biçimlendirme

JavaScript'te toLocaleString() yöntemi, bir sayının çıktısını bölgesel standartlara (işletim sisteminin dil ayarları) uygun olarak biçimlendirmenize olanak tanır.

Örneğin, bir sayıyı sistemde varsayılan olarak yüklü olan bölgesel standartlara uygun olarak biçimlendirelim:

Var numarası = 345,46; console.log(number.toLocaleString()); //"345,46"

Örneğin, sayıyı Rusya'nın bölgesel standartlarına (ru) uygun olarak biçimlendirelim:

Console.log((108.1).toLocaleString("ru-RU")); //"108.1"

Bu yöntem aynı zamanda bir sayıyı para birimi olarak biçimlendirmek için de kullanılabilir:

Console.log((2540.125).toLocaleString("ru-RU",(style:"para birimi", para birimi:"RUB"))); //"2,540,13 ₽" console.log((89.3).toLocaleString("ru-RU",(style:"para birimi", para birimi:"USD")); //"89,30$" console.log((2301,99).toLocaleString("ru-RU",(style:"para birimi", para birimi:"EUR"))); //"2.301,99€"

Bir sayıyı yüzde olarak temsil etmek:

Console.log((0.45).toLocaleString("ru-RU",(style:"yüzde"))); //"%45"

Bir sayıyı rakamlara bölün (useGrouping özelliği):

Console.log((125452.32).toLocaleString("ru-RU",(useGrouping:true))); //"125.452,32"

Ondalık noktadan sonra belirli sayıda basamak (2) içeren bir sayı yazdırın:

Console.log((1240.4564).toLocaleString("ru-RU",(minimumFractionDigits:2, maksimumFractionDigits:2))); //"1.240,46"

Sayıların karşılaştırılması

JavaScript'te sayıları karşılaştırmak için aşağıdaki operatörler kullanılır: == (eşit), != (eşit değil), > (büyüktür),< (меньше), >= (büyük veya eşittir),<= (меньше или равно).

Örneğin iki sayıyı karşılaştıralım:

Console.log(2>3); //false console.log(5>=3); //doğru

Sayıları kesirli kısımlarla karşılaştırırken bu hesaplamalar sırasında ortaya çıkabilecek hataları dikkate almak gerekir.

Örneğin, JavaScript'te sayıların toplamı (0,2 + 0,4) 0,6'ya eşit değildir:

Console.log((0,2+0,4)==0,6); //YANLIŞ

Hatalar, bir bilgisayar veya başka bir elektronik cihazın tüm hesaplamaları 2. sayı sisteminde yapması nedeniyle ortaya çıkar. Onlar. Herhangi bir işlem yapmadan önce bilgisayarın öncelikle ifadede sunulan sayıları 2. sayı sistemine dönüştürmesi gerekir. Ancak her kesirli ondalık sayı 2. sayı sisteminde tam olarak temsil edilemez.

Örneğin 0,25 10 sayısı tam olarak ikili sayıya dönüştürülür.

0,125 × 2 = 0,25 | 0 0,25 × 2 = 0,5 | 0 0,5 × 2 = 1 | 1 0,125 10 = 0,001 2

Örneğin 0,2 10 sayısı ancak belirli bir doğrulukla 2 sistemine dönüştürülebilir:

0,2 × 2 = 0,4 | 0 0,4 × 2 = 0,8 | 0 0,8 × 2 = 1,6 | 1 0,6 × 2 = 1,2 | 1 0,2 × 2 = 0,4 | 0 0,4 × 2 = 0,8 | 0 0,8 × 2 = 1,6 | 1 0,6 × 2 = 1,2 | 1 0,2 × 2 = 0,4 | 0 0,4 × 2 = 0,8 | 0 0,8 × 2 = 1,6 | 1 0,6 × 2 = 1,2 | 1 ... 0,2 10 = 0,001100110011... 2

Sonuç olarak bu hatalar iki sayının toplamının hesaplanmasını ve karşılaştırma sonuçlarını etkileyecektir. Onlar. Görünüşe göre JavaScript bu girişi aslında şu şekilde görecek:

0.6000000000000001==0.6

Kesirli kısımlara sahip sayıları hesaplarken veya görüntülerken, her zaman bunu yapmak istediğiniz kesinliği belirtmelisiniz.

Örneğin, toFixed() ve toPrecision() yöntemlerini kullanarak 2 ondalık basamağa kadar olan sayıları karşılaştırın:

//yöntem toFixed() console.log((0.2+0.4).toFixed(2)==(0.6).toFixed(2)); //true //method toPrecision() console.log((0.2+0.4).toPrecision(2)==(0.6).toPrecision(2)); //doğru

Temel Matematik İşlemleri

JavaScript'te aşağıdaki matematiksel operatörler mevcuttur: + (toplama), - (çıkarma), * (çarpma), / (bölme), % (modülo), ++ (bir değeri 1 artırma), -- (bir değeri azaltma) 1).

6+3 //9 6-3 //3 6*3 //18 6/3 //2 %63 //0, yani. 6:3=2 => 6-3*2 => geri kalan(0) %52 //1, yani. 5:2=2(.5) => 5-2*2 => geri kalan(1) %7.32 //1.3, yani. 7.3:2=3(.65) => 7.3-2*3 => rest(1.3) //% işleminin sonucunun işareti ilk değerin işaretine eşittir -9%2.5 //-1.5 , yani 9:2.5=3(.6) => 9-2.5*3 => rest(1.5) -9%-2.5 //-1.5, yani. 9:2.5=3(.6) => 9-2.5*3 => rest(1.5) -2%5 //-2, yani. 2:5=0(.4) => 2-5*0 => kalan(2) x = 3; console.log(x++); //3'ün çıktısını alır, ardından 4'ü ayarlar console.log(x); //4 x = 3; console.log(++x); //4'ü ayarlıyoruz ve x = 5 çıktısını alıyoruz; console.log(x--); //5 çıktısını alır, sonra 4'ü ayarlar console.log(x); //4 x = 5; console.log(--x); //4'ü ayarlar ve çıktılar Ek olarak, JavaScript'in kombinasyon operatörleri vardır: x+=y (x=x+y), x-=y (x=x-y), x*=y (x=x*y), x/= y (x=x/y), x%=y (x=x%y). x = 3; y = 6; x+=y; console.log(x); //9 x = 3; y = 6; x-=y; console.log(x); //-3 x = 3; y = 6; x*=y; console.log(x); //18 x = 3; y = 6; x/=y; console.log(x); //0,5 x = 3; y = 6; x%=y; console.log(x); //3