JavaScript 系列--JavaScript一些奇淫技巧的实现方法(三)数字取整,数组求和

时间:2021-04-03 16:34:33

一、前言

简短的sleep函数,获取时间戳https://www.mwcxs.top/page/746.html

数字格式化 1234567890 --> 1,234,567,890;argruments 对象(类数组)转换成数组

https://www.mwcxs.top/page/749.html

今天我们来介绍一下数字取整,数组求和。

二、数字取整

1、普通版

const a = parseInt(2.33333);

parseInt()方法是解析一个字符串参数,并返回一个指定基数的整数。这个就是我们最常用的取整的最常用的方式。

parseInt() 函数解析一个字符串参数,并返回一个指定基数的整数 (数学系统的基础)。

parseInt语法:parseInt(string, radix);

string要被解析的值。如果参数不是一个字符串,则将其转换为字符串(使用  ToString 抽象操作)。字符串开头的空白符将会被忽略。

radix一个介于2和36之间的整数(数学系统的基础),表示上述字符串的基数。比如参数"10"表示使用我们通常使用的十进制数值系统。始终指定此参数可以消除阅读该代码时的困惑并且保证转换结果可预测。当未指定基数时,不同的实现会产生不同的结果,通常将值默认为10

2、进阶版

const a = Math.trunc(2.33333)

Math.trunc()方法会将数字的小数部分去掉,只保留整数部分(常说的“取整”,不是四舍五入)。

注意:Internet Explorer 不支持这个方法,不过写个 Polyfill 也很简单:

Math.trunc = Math.trunc || function(x) {
if (isNaN(x)) {
return NaN;
}
if (x > 0) {
return Math.floor(x);
}
return Math.ceil(x);
};

数学的事情还是用数学方法来处理比较好。

3、~~number

这个符号是什么鬼,没有用过,不要紧,慢慢看。这个~~操作符也被称为“双按位非”操作符。你通常可以使用它作为替代Math.trunc()的更快的方法。

console.log(~~66.11)  // 66
console.log(~~12.9999) // 12
console.log(~~6) // 6
console..log(~~-6.9999999999) // -6
console.log(~~[]) // 0
console.log(~~NaN) // 0
console.log(~~null) // 0

失败时返回0,这可能在解决 Math.trunc() 转换错误返回 NaN 时是一个很好的替代。

注意:但是当数字范围超出 ±2^31−1 即:2147483647 时,异常就出现了。

// 异常情况
console.log(~~2147493647.123) // -> -2147473649