2016-09-16 16 views
7

nasıl böyle bir katlanarak az sayıda tamamlayabilirler:yuvarlak katlanarak .toFixed ile az sayıda()

2.4451778232910804e-26.toFixed(4) => 2.4452e-26

docs yılında .toFixed() beni her zaman 0 verecek kullanarak. exponentially small number için özel bir işlev var mı? Number.prototype.toFixed()'u değiştirmemeyi tercih ederim.

+0

https://github.com/jtobey/javascript-bignum sizin örnekte –

+0

sayı => 0,000 (x26) aslında 000244517 negatif değil bir katlanarak az sayıda olduğu görülmektedir ... ve bu yüzden kesinlikle herhangi bir yuvarlanma biçimi ile 0 olarak geri dönecektir, bunun olumsuz ya da pozitif olduğunu düşünüyorum. http://www.2ality.com/2012/03/displaying-numbers.html Bunun bir soruna neden olduğu durum nedir? – Sam0

cevap

4

Daha önce yazdığınız gibi, toFixed, yalnızca "yalnızca" 20 ondalık basamağa izin verdiği için yeterince hassas değil. Çarpma + Bölme işlemi de işe yaramaz, çünkü bölüm size daha uzun bir sayı verebilir. Ancak toPrecision(<amount-of-precision>) yardımcı olabilir.

düzenleme: 4 ondalık basamak istiyorsanız, parametre olarak 5'i geçirmeniz gerekir (nokta sayısından önceki sayılar kadar).

toPrecision size bir Dize verecektir, ancak gerekirse yeniden kolayca bir numaraya geri çevirebilirsiniz. Örneğin. Number(someNumberAsString)

var someNumber = 2.4451778232910804e-26; 
 
console.log(someNumber); 
 
console.log(someNumber.toPrecision(8));

+1

* Teknik olarak *, 20 bir yumuşak sınırdır: "Ondalık noktadan sonra görüntülenecek basamak sayısı; bu, 0 ile 20 arasında bir değer olabilir ve uygulamalar isteğe bağlı olarak daha geniş bir değerler aralığını destekleyebilir." Mozilla'nın SpiderMonkey'i '100''e kadar izin veriyor. –

+0

Gerçekten, '.toPrecision()' mümkün kıldı. .toFixed() ile mücadele ediyordum ama görünüşe göre yeterli değildi. Örnekle açıkladığınız için teşekkürler, cevabı takdir edin! (şimdi 'toPrecision()' ve 'toFixed()' x) arasındaki farkı görüyorum – nehel