js数字的操作

Number

1.parseFloat(Number),去除小数点后面多余的0,

let a = 21.1200
a = parseFloat(a)
console.log(a)         //21.12

2.Number.toFixed() 方法可把 Number 四舍五入为指定小数位数的数字,当位数不足时以0补足。

let a = 21.12345678
a = a.toFixed(4)
console.log(a)         //21.1235

如果小数点前有字母,会得到NaN,如果小数点后有字母,则会去掉字母和字母后面的部分
但是这个方法有一个问题,就是如果a=21.12345,然后取四位小数,结果会为21.1234
这里有一个说法,叫“四舍六入五成双”,也即“4舍6入5凑偶”这里“四”是指≤4 时舍去,"六"是指≥6时进上,"五"指的是根据5后面的数字来定,当5后有数时,舍5入1;当5后无有效数字时,需要分两种情况来讲:①5前为奇数,舍5入1;②5前为偶数,舍5不进。(0是最小的偶数) 。
在浮点数末尾≤4或者≥6的情况下的舍入没有争议,但当末尾正好等于5的情况下可谓混乱之极(与浏览器有关,同样的方法,在谷歌和IE上会有不同显示)。
总结:众所周知,遵循IEEE754数值格式的语言的浮点计算会出现精度损耗的通病,ES也并非独此一家,因此尽量不要进行某个特定浮点数值的测试,如:0.1+0.2;
解决方案:重写Number.prototype.toFixed()方法:

Number.prototype.toFixed=function (d) { 
    var s=this+""; 
    if(!d)d=0; 
    if(s.indexOf(".")==-1)s+="."; 
    s+=new Array(d+1).join("0"); 
    if(new RegExp("^(-|\\+)?(\\d+(\\.\\d{0,"+(d+1)+"})?)\\d*$").test(s)){
        var s="0"+RegExp.$2,pm=RegExp.$1,a=RegExp.$3.length,b=true;
        if(a==d+2){
            a=s.match(/\d/g); 
            if(parseInt(a[a.length-1])>4){
                for(var i=a.length-2;i>=0;i--){
                    a[i]=parseInt(a[i])+1;
                    if(a[i]==10){
                        a[i]=0;
                        b=i!=1;
                    }else break;
                }
            }
            s=a.join("").replace(new RegExp("(\\d+)(\\d{"+d+"})\\d$"),"$1.$2");
 
        }if(b)s=s.substr(1); 
        return (pm+s).replace(/\.$/,"");
    }return this+"";

3.Number.isFinite(),检测一个数值是不是有限的,只有数字且是有限的才会返回true,否则一律是false

Number.isFinite(123);  // true
Number.isFinite("123");  // false
Number.isFinite("sd");  // false

4.Number.isNaN(),检测一个数值是不是NaN,只有数字且是NaN的时候才会返回true,否则一律false

Number.isNaN(NaN);  //true
Number.isNaN(123);  //false

5.parseInt(),转化为整数

const a=parseInt('1.6668bb');
console.log(a); // 1

6.Number(),将给定值转化为数字,语法:Number(obj),返回转换后的数字,如果不能转为数字则返回NaN
7.Number.MAX_VALUENumber.MIN_VALUE

console.log(Number.MAX_VALUE) //返回在 JavaScript 里所能表示的最大数值
console.log(Number.MIN_VALUE) //返回在 JavaScript 里所能表示的最小正值

8.Number.isInteger(),用来判断给定的参数是否为整数,语法:Number.isInteger(number),

console.log(Number.isInteger(1.2)); // false
console.log(Number.isInteger(2)); // true

注意这里前面要加Number
9.Number.isSafeInteger(),用来判断传入的参数值是否是一个“安全整数”。JavaScript 能够准确表示的整数范围在-2的53次方至2的53次方之间(不含两个端点),超过这个范围,无法精确表示这个值。ES6 引入了Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGER这两个常量,用来表示这个范围的上下限。

Number.MAX_SAFE_INTEGER === Math.pow(2, 53) - 1
// true
Number.MAX_SAFE_INTEGER === 9007199254740991
// true
Number.MIN_SAFE_INTEGER === -Number.MAX_SAFE_INTEGER
// true
Number.MIN_SAFE_INTEGER === -9007199254740991
// true
Number.isSafeInteger(3) // true
Number.isSafeInteger(1.2) // false
Number.isSafeInteger(9007199254740990) // true
Number.isSafeInteger(9007199254740992) // false

10.Number.isNan(),用来判断传入的参数值是否是Nan

Number.isNaN(2);  // false
Number.isNaN(NaN);// true
Number.isNaN(Infinity);// false

11.num.toString(),格式化一个number实例为字符串表示形式

console.log(124.456.toString());// '123.456'

12.保留小数点两位且不四舍五入的方法

let a = 1.123456;
let b = a.toFixed(3).toString().split('.'); //如果要保留两位小数的话toFixed的参数就为3,这样做是为了避免a的小数位不足以0补足
let c = b[1].substring(0,2);      //改变最后一个参数可以改变保留位数
console.log(b[0] + '.' +  c); //1.12

注:欢迎补充更正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YangYun_Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值