JavaScript 对数据处理的5个API
在 JavaScript 中,对数值进行四舍五入操作的场景有以下几种:
- 向上取整:ceil
- 向下取整:floor
- 四舍五入:round
- 固定精度:toFixed
- 固定长度:toPrecision
- 取整:parseInt、位运算
本文将对这 6 个 API 进行简单的讲解和总结。
1、向上取整: ceil
ceil 是`天花板`的意思,表示在一个数值之上,且距离该数最近的整数。ceil 是 Math 对象的静态方法,需要传递一个参数,其调用方法如下:
Math.ceil(12.34); //13
Math.ceil(12.68); //13
2、向下取整: floor
floor 是`地板`的意思,表示在一个数值之下,且距离该数最近的整数。floor 是 Math 对象的静态方法,需要传递一个参数,其调用方法如下:
Math.floor(12.34); // 12
Math.floor(12.68); // 12
3、四舍五入: round
round 的作用是对一个浮点数进行四舍五入,并保留整数位。round 也是 Math 对象的静态方法,也需要传递一个参数,其调用方法如下:
Math.round(12.34); // 12
Math.round(12.54); // 13
4、固定精度: toFixed
toFixed 和上面三个方法不同,它是 Number 原型上实现的一个方法,其作用是对一个浮点数进行四舍五入并保留固定小数位。 toFixed 需要传递一个参数,其调用方式如下:
100.456001.toFixed(2); // 100.46
100.456001.toFixed(3); // 100.456
5、固定长度: toPrecision
toPrecison 也是 Number 原型上实现的一个处理浮点数的方法,和 toFixed 不同的是,它是对一个浮点数进行四舍五入并保留固定长度的有效数字,包括整数部分。
99.456001.toPrecision(5); // 99.456
100.456001.toPrecision(5); // 100.46
6、取整: parseInt
parseInt 是 全局对象 window上的一个方法,其作用是对一个可转换的数值取整,分为以下两种情况:
1. 将字符串数值转化为 Number 整数,对字符串的每一个字符进行转化,直到遇到不可转化的字符(包括小数点)停止。
2. 对浮点类型数值取整,忽略小数部分,不做四舍五入处理
// 字符串数值
parseInt('100') ; // 100
parseInt('100axt'); // 100
parseInt('100xh20'); // 100
parseInt('100.78'); // 123
// Number 类型
parseInt(100.12) ; // 100
parseInt(100.78); // 100
7、取整: 位运算
- | 0 : 和 0 进行 按位或 操作,原值不变
- ~~ : 两次 按位非 操作得到的也是原值
- >> 0 : 右移 0 位
- << 0 : 左移 0 位
- >>> 0: 无符号右移 0 位
这些位运算符在实现取整操作时,会表现出一些共同的特征:
- 对于 Number 类型来说,直接应用位操作, 和 parseInt 得到的结果几乎一样;
- 对于其他类型,内部会先通过 Number() 将其转换为一个数值,然后再应用位操作。
- 对特殊 NaN 和 Infinity 值应用位操作时,这两个值都会被当成 0 来处理 。
对于 Number 类型,直接应用位运算。
~~ 100.12; // 100
100.78 | 0; // 100
100.45 >> 0; // 100
100.50 << 0; // 100
100.96 >>> 0; // 100
对于其他类型,先使用 Number() 转换为数值类型,再进行位运算。
~~ '100.12' // 100, Number('100.12') == 100.12
'100.50' >> 0; // 100,Number('100.50') == 100.50
'100.96' << 0; // 100,Number('100.96') == 100.96
~~ 'abc' // 0 , Number('abc') == NaN
'12abc' >> 0; // 0, Number('12abc') == NaN
undefined | 0 ; // 0, Number(undefined) == NaN
~~null; // 0 , Number(null) == 0
true >> 0; // 1 , Number(true) == 1
false >> 0; //0 , Number(false) == 0
[] << 0; // 0 , Number([]) == 0
~~NaN; // 0
Infinity >>> 0; // 0
位运算作用于最基本的层次上,即按内存中表示数值的位来操作数值。
位运算能取整的原因是:
ECMAScript 中的数值以64位双精度浮点数存储,但位运算只能作用于整数,因此要先将 64 位的浮点数转换成 32 位的整数,然后再进行位运算,最后再将计算结果转换成64位浮点数存储。
原创发布 @ 一像素 2018.06
JavaScript 对数据处理的5个API的更多相关文章
- JavaScript中对数组和数组API的认识
JavaScript中对数组和数组API的认识 一.数组概念: 数组是JavaScript中的一类特殊的对象,用一对中括号“[]”表示,用来在单个的变量中存储多个值.在数组中,每个值都有一个对应的不重 ...
- javascript 内置对象及常见API
javascript 内置对象及常见API 2012-09-02 15:17 571人阅读 评论(0) 收藏 举报 javascript正则表达式文档浏览器urlstring Javascript内置 ...
- 微信小程序wx.getLocation()获取经纬度及JavaScript SDK调用腾讯地图API获取某一类地址
简介 腾讯位置服务为微信小程序提供了基础的标点能力.线和圆的绘制接口等地图组件和位置展示.地图选点等地图API位置服务能力支持,使得开发者可以自由地实现自己的微信小程序产品. 在此基础上,腾讯位置服务 ...
- 盘点JavaScript里好用的原生API
转自:https://segmentfault.com/a/1190000002753931 解析字符串对象 我们都知道,JavaScript对象可以序列化为JSON,JSON也可以解析成对象,但是问 ...
- JavaScript文件加载器LABjs API详解
在<高性能JavaScript>一书中提到了LABjs这个用来加载JavaScript文件的类库,LABjs是Loading And Blocking JavaScript的缩写,顾名思义 ...
- JavaScript 客户端JavaScript之样式表操作(DOM API 提供模块之一)
层叠样式 表和动态HTML 层叠样式表(CSS)是指定HTML文档或XML文档的表现的标准. 使用CSS和Javascript,可以创建出各种视觉效果,这些效果可以统称为动态HTML(DH ...
- [Javascript] Intro to the Web Audio API
An introduction to the Web Audio API. In this lesson, we cover creating an audio context and an osci ...
- JavaScript:我总结的数组API
栈/队列 数组es3: pop删除最后一项(栈) shift删除第一项(队列) push增加到最后(栈) unshift增加到最前(队列) reverse翻转 join转字符串 slice截取(切片) ...
- JavaScript JSON 数据处理
在JavaScript 也自带了 JSON 格式的处理 <!doctype html> <html> <script> var test_json_str = { ...
随机推荐
- Android权限管理之Permission权限机制及使用
前言: 最近突然喜欢上一句诗:"宠辱不惊,看庭前花开花落:去留无意,望天空云卷云舒." 哈哈~,这个和今天的主题无关,最近只要不学习总觉得生活中少了点什么,所以想着围绕着最近面试过 ...
- Go结构体实现类似成员函数机制
Go语言结构体成员能否是函数,从而实现类似类的成员函数的机制呢?答案是肯定的. package main import "fmt" type stru struct { testf ...
- var和dynamic的区别
1.var 1.均是声明动态类型的变量. 2.在编译阶段已经确定类型,在初始化的时候必须提供初始化的值. 3.无法作为方法参数类型,也无法作为返回值类型. 2.dynamic 1.均是声明动态类型的变 ...
- iOS UITableView 与 UITableViewController
很多应用都会在界面中使用某种列表控件:用户可以选中.删除或重新排列列表中的项目.这些控件其实都是UITableView 对象,可以用来显示一组对象,例如,用户地址薄中的一组人名.项目地址. UITab ...
- [数据结构]——链表(list)、队列(queue)和栈(stack)
在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...
- 安装angular-cli
最近在学习angular2,并尝试用这个框架来做公司的一个新项目. 终于要开始开发了,等了1个多月. 因为第一次用这个新框架做项目,不太熟悉,就找了angular-cli这个脚手架来搭建项目. 安装了 ...
- Android之ContentProvider数据存储
一.ContentProvider保存数据介绍 一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去,而且ContentProvider是以类似数据库中表的方式将数 ...
- 真正的汉化-PowerDesigner 16.5 汉化
一.背景 经常使用PowerDesigner,之前使用15版本,后来16出来后,就一直在使用16,不过一直是英文.一些同事对使用英文版总显示有些吃力. 遍寻百度.必应,都没有找到真正的针对版本16的汉 ...
- Fedora 22中的Locale and Keyboard Configuration
Introduction The system locale specifies the language settings of system services and user interface ...
- ASP.NET MVC Model验证(二)
ASP.NET MVC Model验证(二) 前言 上篇内容演示了一个简单的Model验证示例,然后在文中提及到Model验证在MVC框架中默认所处的位置在哪?本篇就是来解决这个问题的,并且会描述一下 ...