js除了Math.floor方法,还可以通过位运算|,>>实现向下取整

时间: 2018-01-10阅读: 4058标签: 运算

我们都知道通过Math.floor()方法可实现数值的向下取整,得到小于或等于该数字的最大整数。


语法如下:

Math.floor(x)

说明:x必需,并且是一个数值。

1.如果是字符串(非数字类型'1.01'以外),输出NaN;
2.如果是true,则输出1,false为0


Math.floor()实例:

console.log(Math.floor(0.8));//输出0
console.log(Math.floor(-0.8));//输出-1
console.log(Math.floor(1));//输出1
console.log(Math.floor('d'));//如果不是数值,输出NaN

如果参数是一个涉及浮点数的表达式,那么可能会出现不准的问题,如下:

Math.floor(0.5+0.49999999999999999);//输出1

而实际上它结算的结果应该小于1,输出应该是0的,这里怎么就变成了1呢?原因这里有:理解并如何解决js中浮点数计算不精准的问题


位运算实现向下取整

除了上面的常用方法外,在一些地方我们还可能会看到使用位运算来实现向下取整。例如:

console.log(0.8 | 0);//输出0
console.log(-0.8 | 0);//输出0
console.log(1 | 0);//输出1

或者使用>>:

console.log(0.8 >> 0);//输出0
console.log(-0.8 >> 0);//输出0
console.log(1 >> 0);//输出1


位运算实现的原因:

这是由于js内部的类型自动转换,js数值都是由64位浮点型表示的,当进行位运算的时候,会自动转换为32为有符号的整数,并舍弃小数位。所以就可以实现向下取整了。


位运算和Math.floor()的差别:

1.精度的损失,最大有效范围: 2^32/2-1

var a=(Math.pow( 2,32)/2-1)+0.5;//a=2147483647.5
a | 0;
a >> 0;
Math.floor(a);
//结果都为2147483647
a+=1;
a | 0;//输出-2147483648
a >> 0;//输出-2147483648
Math.floor(a);//输出2147483648

2.当值为负数的时候,会位运行的结果和Math.floor不一致:

console.log(Math.floor(-0.8));//输出-1  
console.log(-0.8 | 0);//输出0  
console.log(-0.8 >> 0);//输出0

只是由于它先进行转为32位的整数,再在进行舍去小数位,最后转变为负数的结果。


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/345

看了此文,你还敢说你懂了Javascript运算符吗

JavaScript的很多奇技淫巧,都来自于对运算符的灵活使用。JavaScript的JavaScript的很多奇技淫巧,都来自于对运算符的灵活使用。优先级: 优先级高的运算符最先被执行

斐波那契列数JS的三种实现

大家是怎么实现斐波那契列数的,再给两种解法,对比一下,还有一种更简单的用的是数组存储

ES6中扩展运算符(spread)和剩余运算符(rest)

扩展运算符用三个点号表示,功能是把数组或类数组对象展开成一系列用逗号隔开的值;rest运算符也是三个点号,不过其功能与扩展运算符恰好相反,把逗号隔开的值序列组合成一个数组

Js中NaN不等于NaN

断点调试之后发现无论如何都不相等,方法parseInt()返回的结果确实是NaN,但是与右侧的NaN比较返回的结果却是false,这时候才突然想起来NaN有不等于自身的特性

JS判断素(质)数,并找出100~1000之间的所有素(质)数

素数:又称质数,即大于1,且只能被1和它本身整除的数,步骤构思:for遍历循环找其他约数,if设置满足条件(计数器从2开始,不包括它本身)有则中断输出

JavaScript大数相加相乘实现

JavaScript 中的最大安全整数是 2 ^{53} – 1253–1,即 9007199254740991,当我们进行超出这个范围的数值计算的时候就无法得到精确的值,而是一个近似值

js中使用位运算,让执行效率更高

平常的数值运算,其本质都是先转换成二进制再进行运算的,而位运算是直接进行二进制运算,所以原则上位运算的执行效率是比较高的,由于位运算的博大精深,下面通过一些在js中使用位运算的实例

JS解决加减乘除浮点类型丢失精度问题

当我们在前端使用js来执行运算时,会有丢失精度的问题。

js 位运算符_js按位运算符及其妙用

大多数语言都提供了按位运算符,恰当的使用按位运算符有时候会取得的很好的效果。在我看来按位运算符应该有7个:& 按位与、| 按位或、^ 按位异或、~ 按位非

Js new运算符

new运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。new关键字会进行如下的操作:1. 创建一个空的简单JavaScript对象(即{});2. 链接该对象(即设置该对象的构造函数)到另一个对象 ;

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!