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

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

我们都知道通过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位的整数,再在进行舍去小数位,最后转变为负数的结果。


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

JS怎样做四舍五入?

toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。例如将数据Num保留2位小数,则表示为:toFixed(Num);但是其四舍五入的规则与数学中的规则不同,使用的是银行家舍入规则

有趣的 Js运算符用法

JavaScript 提供了几种运算符,可以用来对简单的值执行一些基本操作,如算术运算、赋值、逻辑运算、按位运算等。JavaScript 代码中赋值、算术和逻辑三种运算符经常会混合使用,但按位运算符就用得没那么多了。

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

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

JS小数运算失精度的问题

浮点数值的最高精度是17位小数,但在进行运算的时候其精确度却远远不如整数;整数在进行运算的时候都会转成10进制; 而java和JavaScript中计算小数运算时,都会先将十进制的小数换算到对应的二进制,一部分小数并不能完整的换算为二进制

js中的相等==

今天学习 jest,看文档的时候发现 jest 用到了 Object.is(),以前没有见过,所以记录下来,供以后开发时参考,相信对其他人也有用。如果下列任何一项相同,则 Object.is(value1, value2) 返回 true:

Js中按位操作符的有趣应用

JavaScript提供了几种运算符,可以对一些简单的值进行基本操作,比如算术操作、赋值操作、逻辑操作、按位操作等。我们经常可以看到混合了赋值操作,算术操作和逻辑操作的JavaScript代码

JavaScript之操作符

计算机被发明的初衷仅仅是为了快速实现一些数学计算,然而经过多年发展,计算机已经不单单能实现快速计算这么简单的工作了,现代计算机不仅能够进行数值的计算,还能进行逻辑计算,还具备存储记忆功能,是能够按照程序运行

Js运算规则与运算(逻辑、位)

所有与string类型数据进行运算得到的结果一定是字符类型;与number类型数据进行运算时,会将其它非string类型数据转换为number,若转换成功,则结果为number,转换不成功则为:NaN;

js中的位运算及用法

位运算是在数字底层(即表示数字的 32 个数位)进行运算的。由于位运算是低级的运算操作,所以速度往往也是最快的(相对其它运算如加减乘除来说),并且借助位运算有时我们还能实现更简单的程序逻辑,缺点是很不直观

Js计算平均值的不同实现方式

如果我们有以下数组:需求是先过滤掉 found 为 false 的 item 再计算求平均值;一般想到的方法不外乎是一下几种:

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

广告赞助文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全