admin管理员组

文章数量:1363838

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.

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.

Share Improve this question edited Nov 2, 2010 at 16:13 qqryq asked Oct 31, 2010 at 9:50 qqryqqqryq 1,9243 gold badges18 silver badges21 bronze badges 1
  • Two ments: (1) The last word should be "error", not "mistake". "error" is a technical term in dealing with floating point putations. (2) Can you give some context for why you need the error in a floating point calculation? It may be that there are other ways to achieve your ultimate goal without emulating single precision in javascript. – Philip Starhill Commented Nov 1, 2010 at 18:57
Add a ment  | 

2 Answers 2

Reset to default 12

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.

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

本文标签: floating pointSingle precision float emulation in Javascript (float32)Stack Overflow