一、数字的语法
JavaScript中的数字字面量一般用十进制表示。在JavaScript中表示数字的数据类型只有一种Number,这种天使与魔鬼同体的数据类型也就只有js了。
//同时表达整数和浮点数 var a = 78, b = 78.3; console.log(typeof a);//number console.log(typeof b);//number
然后还有一些奇葩的数字表示法:
var a = 0.42, b = .42; if(a === b){ console.log("你讲得对。") }
一般情况下,奇葩都是成双成对的:
var a = 69.0, b = 69.; if(a === b){ console.log("你讲得对。") }
这种奇葩你认识它就好了,最好不要出现在你的代码里,记得这种长得丑的写法不报错,但也没事别给自己挖坑。
var a = 89.900, b = 98.0; console.log(a);//89.9 console.log(b);//98
小数点后面最后的面的零不管几个都省略,有时候发点神经,不拖泥带水还是挺潇洒的。然后还有指数计数格式计数与指数显示。
var a = 9E10; console.log(a);//90000000000--通常我们使用指数计数法但是不会按照指数计数法显示 console.log(a.toExponential());//9e+10--通过toExponential方法转换成指数计数法字符串形式显示 var b = a * a; console.log(b);//8.1e+21--当数字长度超出一定范围就会自动转成指数计数法 var c = 1 / b; console.log(c);//1.234567901234568e-22--小写范围超出也会被转成指数计数法
这时候就有一个尴尬的问题来了,显示的是指数计数字面量,有多少人认识呢?所以就需要做数字化字面量处理:(下面的解决方案只能解决JavaScript整数安全范围内和最小小数范围内的数值。超出这个范围的数值听说可以解除Math.js,我也是在别人的博客里看到有介绍过的,没有亲测过。)
function toNonExponential(num) { var m = num.toExponential().match(/\d(?:\.(\d*))?e([+-]\d+)/); //通过match检索每个整个分组的值(非抓捕除外),并以数组表示 //(m[1] || '').length;//--\d*--获取到小数位的长度 //m[2];//--([+-]\d+)--获取到指数 //(m[1] || '').length - m[2];小数位长度与指数的查(小数的长度) //小数位长度为负数时,设置为0--math.max取最大值 return num.toFixed(Math.max(0, (m[1] || '').length - m[2])); } toNonExponential(3.3e-7) // "0.00000033" toNonExponential(3e-7) // "0.0000003" toNonExponential(1.401e10) // "14010000000" toNonExponential(0.0004) // "0.0004"