一、数字的语法

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"
View Code

相关文章:

  • 2021-10-07
  • 2021-07-27
  • 2021-06-26
  • 2021-11-23
猜你喜欢
  • 2022-01-03
  • 2022-02-07
  • 2021-12-23
  • 2021-07-20
  • 2022-01-03
  • 2021-12-16
相关资源
相似解决方案