2010-10-31 19 views
6

Javascript'te tek duyarlıklı yüzdeyi bir şekilde taklit etmek mümkün mü? Doug Crockford'un bloguna göre "Number 64-bit kayan nokta" dır, fakat tek bir hassas float hatası hesaplayan C++ algoritmasını taşımak için tek bir tane kullanmalıyım.Javascript'te tek duyarlıklı yüzdürme öykünmesi (float32)

+0

İki yorum: (1) Son sözcük "hata" değil "hata" olmalıdır. "hata" kayan nokta hesaplamaları ile ilgili teknik bir terimdir. (2) Kayan nokta hesaplamasında neden hataya ihtiyaç duyduğunuza dair bir bağlam verebilir misiniz? Javascript'te tek bir hassaslık uyandırmadan nihai hedefinize ulaşmanın başka yolları da olabilir. –

cevap

4

ES6 standardı, float64'ü float32'ye dönüştüren ve sonra tekrar geri dönen, float32 hassasiyetini etkin bir şekilde yuvarlatan Math.fround() öğesine sahiptir. Ayrıntılar için bkz. this article.

-1

Bu JavaScript fonksiyonunu deneyin. Sayıyı altı ondalık basamağa yuvarlamak için .tofixed (6) kullanır.

function ToSingle(s) { 
s = s.toString().toUpperCase(); 
if (s.indexOf("E") == -1) s = parseFloat(s).toExponential().toUpperCase(); 
if (s.indexOf("E") == -1) return s 

var o = s.split("E"); 
var s1 = o[0]; 

if (s1.indexOf(".") == -1) return s 
if (s1.split(".")[1].length < 7) return s; 

var num = parseFloat(s1); 
if (num + "" == "NaN") return s; 

return num.toFixed(6) + "E" + o[1]; 
}