JavaScript浮点运算中的跨浏览器一致性

civ*_*ain 2 javascript floating-point

我的目标是拥有一个百分度/弧度的翻译工具.

var PI      = 3.1415926535897936;
var PI_100  = 1.5707963267948968; // PI*0.5;
var PI_300  = 4.71238898038469;   // PI*(1.5);
var D_PI    = 6.283185307179587;  // 2*pi

var centTo  = 0.015707963267948967; 
Run Code Online (Sandbox Code Playgroud)

Chrome评估以下表达式,如下所示:

PI*2 == D_PI      >>> true
PI*0.5 = PI_100   >>> true
PI*1.5 = PI_300   >>> true

100*centTo == PI_100  >>> true
300*centTo == PI_300  >>> true
Run Code Online (Sandbox Code Playgroud)

这些表达式总是true在每个浏览器上?

或者我必须在比较时使用epsilon吗?

var epsilon = 0.0000001;
Math.abs(a - b) < epsilon
Run Code Online (Sandbox Code Playgroud)

小智 6

除了检查无穷大或NaN之外,使用与浮点数进行等效比较是不好的编程语言.最好检查并查看某个值是否在某个容差范围内.