JavaScript在运算上存在一些不可思议的地方,下面列出几种我已知的一些例子:
/*加法*/
console.log(0.1+0.2); //0.30000000000000004
/*乘法*/
console.log(0.000001*10); //0.000009999999999999999
console.log(0.000002*10); //0.000019999999999999998
console.log(0.0003*10); //0.0029999999999999996
console.log(0.00003*10); //0.00030000000000000003
console.log(0.000004*10); //0.000039999999999999996
console.log(0.0000005*10); //0.0000049999999999999996
console.log(0.0006*10); //0.005999999999999999
console.log(0.00006*10); //0.0006000000000000001
console.log(0.07*10); //0.7000000000000001
console.log(0.00007*10); //0.0006999999999999999
console.log(0.07*100); //7.000000000000001
console.log(0.007*100); //0.7000000000000001
console.log(0.0007*100); //0.06999999999999999
console.log(0.00007*100); //0.006999999999999999
console.log(0.000008*10); //0.00007999999999999999
console.log(0.09*10); //0.8999999999999999
console.log(.009*100); //0.8999999999999999
console.log(0.00009*10); //0.0009000000000000001
/*除法*/
console.log(0.00001/10); //0.0000010000000000000002
console.log(0.00002/10); //0.0000020000000000000003
console.log(0.003/10); //0.00030000000000000003
console.log(0.0003/10); //0.000029999999999999997
console.log(0.00004/10); //0.000004000000000000001
console.log(0.006/10); //0.0006000000000000001
console.log(0.0006/10); //0.000059999999999999995
console.log(0.7/10); //0.06999999999999999
console.log(0.07/10); //0.007000000000000001
console.log(0.00007/10); //0.000006999999999999999
console.log(0.00008/10); //0.000008000000000000001
console.log(0.0009/10); //0.00008999999999999999
console.log(0.9/100); //0.009000000000000001
console.log(.009/100); //0.00008999999999999999
/*字符串转数字取整*/
parseInt(0.0000001); //1
/*数字转字符串*/
0.0000004.toString(); //"1e-7"
/*数组排序*/
var arr = [12,168,45,95,22];
console.log(arr.sort()); //12,168,22,45,95
github上有位仁兄对背后产生的根源剖析了得比较清楚,有兴趣的可以看看(访问需要借助梯子)
http://elevenbeans.github.io/2017/07/07/floating-point-issue/