转换成整数的方法

把数字转换成整数的方法

)

方法一:Math函数

1.Math.floor()将其参数转换成小于且最接近它的整数(下取整)。

>Math.floor(3.8)
3
>Math.floor(-3.8)
-4

2.Math.ceil()将其参数转换成大于且最接近它的整数(上取整)。

>Math.ceil(3.2)
4
>Math.ceil(-3.2)
-3

3.Math.round()将其参数转换成最接近它的整数。

/*当数字为正值时,四舍五入*/
>Math.round(2.3)
2
>Math.round(2.5)
3
>Math.round(2.8)
3
/*当数字为负值时,Math.round(x)相当于Math.ceil(x+0.5)*/
>Math.round(-2.3)
-2
>Math.round(-2.5)
-2
>Math.round(-2.8)
-3

方法二:通过定制函数ToInteger()得到函数(JavaScript不一定支持)(ECMAScript内置ToInteger()方法,该方法会移除浮点数的小数部分)

该函数在JavaScript中的实现如下:

 function ToInteger(x){
	x=Number(x);
	return x<0? Math.ceil(x):Math.floor(x);
	}

测试结果如下:

>ToInteger(3.2)
3
>ToInteger(3.5)
3
>ToInteger(3.8)
3
>ToInteger(-3.2)
-3
>ToInteger(-3.5)
-3
>ToInteger(-3.8)
-3

方法三:通过位运算符得到32位整数

1.二进制或Or(|)

第二个操作数为0,不会改变任何位,结果为第一个操作数,被强制转换成了一个有符号的32位整数。
实现方法如下:

function ToInt32(x){
	return x|0;
}

ToInt32()移除了小数部分,并且对2的32次方取模
测试结果如下:

>ToInt32(1.0001)
1
>ToInt32(1.999)
1
>ToInt32(Math.pow(2,32)+1)
1
>ToIn32(Math.pow(2,32)-1)
-1

方法四:通过全局函数parseInt()得到整数

parseInt()函数:
parseInt(str,radix?)
将字符串str(非字符串类型的值会被强制转换)解析成整数。该函数会忽略开头的空白字符并尽可能多地查找连续的合法字符。
radix(即)基数的范围是“大于等于2,且小于等于36”,它决定了数字被解析时的基数。如果基数大于10,会使用字母来表示0到9之外的数字(不区分大小写)。
如果没有设定基数,则基数默认是10,除非要解析的字符串以0x或者0X开头,此时基数被设为16(十六进制)。
如果str以0开头的话,有些引擎会将它们的基数设为8。
最好显式地声明基数,总是使用两个基数来调用parseInt()。
测试结果如下:

>parseInt('0xA')
10
>parseInt('0xA',16)
10
/*基数已经是16,十六进制的前缀可以省略*/
>parseInt('A',16)
10
>parseInt('010')
10
>parseInt('0101')
101
/*如果str以0开头的话,有些引擎会将它们的基数设为8*/
>parseInt('010')
8
>parseInt('0109')
8

不要使用parseInt()来转换数字成整数,因为有的时候会出现错误,例如:

>parseInt(1000000000000000000000.5,10)
1
>parseInt(0.0000008,10)
8

解释:
参数首先会被转换成字符串。

>String(1000000000000000000000.5)
"1e+21"

parseInt认为e不是整数,因此在1后面就停止解析了。

parseInt("1e+21",10)
1

总结:不应该使用parseInt()将数字转换成整数;强制转换成字符串会走不必要的弯路,且结果也不一定正确。
parseInt()对于解析字符串非常有用,但是必须注意函数在遇到第一个非法字符时会停止解析。

    原文作者:巷口等风
    原文地址: https://blog.csdn.net/qq_37855074/article/details/88964500
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞