SORU
22 EYLÜL 2009, Salı


Nasıl JavaScript nokta sayısı kayar ile başa çıkmak için?

Aşağıdaki kukla test komut dosyası var:

function test(){
    var x = 0.1 * 0.2;
    document.write(x);
}
test();

Bu sadece 0.02 Eğer hesap makinesini kullanın (varsa) baskı gerekirken sonuç 0.020000000000000004 Yazdır. Bu kayan nokta çarpma hassas hataları nedeniyle anladığım kadarıyla.

Kimse böyle bir durumda doğru sonucu 0.02, Bu yüzden bu iyi bir çözüm var mı? toFixed gibi işlevleri olduğunu biliyorum ya da yuvarlama başka bir olasılık olurdu, ama ben bu numarayı herhangi bir kesme olmadan basılı ve yuvarlama etmek istiyorum. Sadece bir güzel, zarif bir çözüm olup olmadığını bilmek istiyordu.

Tabii ki, aksi takdirde bazı 10 basamaklı yuvarlak ederim.

CEVAP
9 AĞUSTOS 2010, PAZARTESİ


Floating-Point Guide:

Ben bu sorunu önlemek için ne yapabilirim?

Bu ne tür bağlıdır hesaplamalar yapıyorsun.

  • Eğer gerçekten sonuçlar özellikle Sen tam olarak ne zaman toplayın, gerekiyorsa para ile çalışma: özel bir ondalık kullanın veri türü.
  • Eğer sen tüm bu ekstra ondalık görmek istemiyorsanız mi: sadece format sonucu bir sabit yuvarlak sayının ondalık zaman bunu görüntüleniyor.
  • Eğer ondalık veri türü varsa, alternatif çalışmaktır tamsayılar, örneğin, do para hesaplamalar sent tamamen. Ama bu daha fazla iş ve bazı vardır sakıncaları.

İlk nokta eğer kesin belli gerçekten gerekiyorsa geçerlidirondalıkdavranış. Çoğu insan, kendi programları doğru olsa bile 1/3 ile yapılmışsa aynı hatayı göz ardı etmeyeceğini farkında olmadan 1/10 gibi bir sayı ile işe yaramayan sadece rahatsız olmaları gerekmez.

Eğer ilk nokta gerçekten senin için geçerli değil, zarif değil, ama aslında mükemmel bir çözüm sağlamak yerine sorunu çözer BigDecimal for JavaScript kullanın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Fubar Protocol

    Fubar Protoc

    21 AĞUSTOS 2010
  • PlugResearch

    PlugResearch

    22 Mart 2006
  • Rachel Talbott

    Rachel Talbo

    26 Ocak 2011