alexa  Menu
Javascript ile yuvarlama hatası çözümü

Javascript ile yuvarlama hatası çözümü

  01.06.2018 ,   1 yorum ,   4.287 kez okundu.

Javascript web uygulamalarımızda çok kullandığımız bir dil. Kullanıcı tarafında dinamik işlemler yaparken çok kullanıyoruz. Siteye ayrı bir güzellik kullanışlılık katıor.

Benim anlatmak istediğim daha çok hesaplama işlemleri ile ilgili. Özellikle küsüratlı sayılarda basamak sayı belirlendiğinde yuvarlama işleminin doğru yapılmadığını görebilirsiniz.

Örnek olarak bazı yuvarlama işlemlerini paylaşıyorum:

console.log(Math.round(20.47)) // sonuç 20  - doğru
console.log(Math.round(20.59)) // sonuç 21 - doğru
console.log(Math.round(1.006*100)/100) //sonuç 1.01 - doğru

Şimdi biraz kodumuzu değiştirelim:

console.log(Math.round(1.005*100)/100); // sonuç 1 - yanlış
console.log(Number((1.005).toFixed(2))); // sonuç 1 - yanlış

Sonuç olarak çarpa, bölme işlemlerinden sonra virgülden sonraki basamaklarda yuvarlama işleminde sorun oluyor. Normalde 5 ve üzeri ise kendinden önceki sayıyı bir üst sayıya yuvarlaması gerekirken, yukarıda paylaştığım kod parçacığında da gördüğünüz gibi yanlış yuvarlıyor. Mesela, 1.05 ise 1.1, 1.03 ise 1.0 gibi yuvarlaması gerekiyor.

Bu sorunu çözebilmek için aşağıdaki gibi bir fonksiyon oluşturabiliriz:

function yuvarla(sonuc, basamak) {
    return Number(Math.round(sonuc+'e'+basamak)+'e-'+basamak);
}

yuvarla((1.005*100)/100,2); //sonuç - 1.01

yuvarla((1.0457*100)/100*2,3) //sonuç - 2.091

yuvarla((1.0457*100)/100*2,1) //sonuç - 2.1

Umarım işinize yaramıştır. İyi çalışmalar dilerim.

1 yorum yapılmış

    huseyn

    salam Javascripde mentiksel hesablama nece olour const a = n => {
    let sum = 1;
    let prev = 1
    for(let i =2; i < n + 1; i++)
    {
    sum = sum + prev*1

    prev = prev * 1
    }
    return sum;} bele hesablam turleri elemey istiyirem mellim ev tapsirigi kimi verib

    10.08.2022, 10:31:26

Yorum yapın..

isim yerine gerçek isim ve soyisim yazılmadan yapılan yorumlar kesinlikle onaylanmıyor bilginiz olsun.


The reCAPTCHA verification period has expired. Please reload the page.