qqryq
qqryq

Reputation: 1924

Single precision float emulation in Javascript (float32)

Is it possible to somehow emulate single precision float in Javascript? According to Doug Crockford's blog "Number is 64-bit floating point", but I have to use single one for porting C++ algorithm which calculates single precision float's error.

Upvotes: 10

Views: 4991

Answers (2)

Igor Krupitsky
Igor Krupitsky

Reputation: 885

Try this JavaScript function. It uses .toFixed(6) to round off the number to six decimal places.

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];
}

Upvotes: -3

SteveH
SteveH

Reputation: 301

The ES6 standard has Math.fround() which converts a float64 to float32 and then back again, effectively rounding the float to float32 precision. See this article for details.

Upvotes: 12

Related Questions