详解JS数值Number类型


Posted in Javascript onFebruary 07, 2018

Number 问题

下面的问题你都能回答对了吗?

  • 0.1 + 0.2 == 0.3 成立吗?
  • .e-5 表示多少?
  • 怎么表示8进制?
  • 怎么转换进制?
  • 如何将字符串转换成数值或整数?反过来呢?十六进制又怎么处理?
  • parseInt(0x12, 16) 的返回值是多少?是0x12吗?
  • Number.MAX_VALUE 为最大数值,(new Number(12)).MAX_VALUE 是多少?
  • JavaScript中怎么进行四舍五入?如果保留3位小数的精度?
  • 如何获取一个随机数?如何取整?如何向上取整?

Number数字表示方法

Number类型表示数字,JavaScript 采用“IEEE 754 标准定义的双精度64位格式”("double-precision 64-bit format IEEE 754 values")表示数字。

和其他编程语言(如 C 和 Java)不同,JavaScript 不区分整数值和浮点数值,所有数字在 JavaScript 中均用浮点数值表示,所以在进行数字运算的时候要特别注意进度缺失问题。

0.1 + 0.2 = 0.30000000000000004;
0.1 + 0.2 == 0.3; // false
// 浮点运算判断相等
var ACCURACY = 1e-5; //定义精度精确到0.00001
var a = 0.1;
var b = 0.2;
var sum = 0.3;
// 判断相差小于精度就认为相等
if (a + b - sum < ACCURACY) {
 console.log('a+b == sum');
}

在具体实现时,整数值通常被视为32位整型变量,在个别实现(如某些浏览器)中也以32位整型变量的形式进行存储,直到它被用于执行某些32位整型不支持的操作,这是为了便于进行位操作。

可以使用省略 0 表示小数,也可以用指数形式表示数字

.9; // 0.9
1E3 // 1000
2e6 // 2000000
0.1e2 // 10
1e-5 // 0.00001

Number数字不同进制

不同进制的表示方法

Number可以使用四种数字进制:十进制,二进制,八进制和十六进制。非十进制只使用与整数。

  • 二进制表示法:以零为开头,后面接一个小写或大写的拉丁文字母B(0b或者是0B)
  • 八进制表示法:以0为开头的。假如0后面的数字不在0到7的范围内,该数字将会被转换成十进制数字。
  • 在ECMAScript 5 严格模式下禁止使用八进制语法,会被视为十进制
  • 在ECMAScript 6中使用八进制数字是需要给一个数字添加前缀"0o"
  • 十六进制表示法:以零为开头,后面接一个小写或大写的拉丁文字母X(0x或者是0X)
// 十进制
12345678
42
0777 // 在非严格格式下会被当做八进制处理 (用十进制表示就是511)
// 二进制
var a = 0b100000; // 32
var b = 0b0111111; // 63
var c = 0B0000111; // 7
// 八进制
var n = 0755; // 493
var m = 0644; // 420
var a = 0o10; // ES6 :八进制
// 十六进制
0xFFFFFFFFFFFFFFFFF // 295147905179352830000
0x123456789ABCDEF // 81985529216486900
0XA     // 10

不同进制的转换

进制的转换主要用到Number的toString()方法或parseInt()方法:

  • toString() 方法接受一个值为 2~36 之间的整数参数指定进制,默认为十进制,将Number转为String
  • parseInt() 第二个参数接受一个值为 2~36 之间的整数参数指定进制,默认为十进制,将String转为Number
// toString转换,输入为Number,返回为String
var n = 120;
n.toString(); // "120"
n.toString(2); // "1111000"
n.toString(8); // "170"
n.toString(16); // "78"
n.toString(20); // "60"
0x11.toString(); // "17"
0b111.toString(); // "7"
0x11.toString(12);// "15"
// parseInt转换,输入为String,返回为Number
parseInt('110'); // 110
parseInt('110', 2); // 6
parseInt('110', 8); // 72
parseInt('110', 16); // 272
parseInt('110', 26); // 702
// toString和parseInt结合使用可以在两两进制之间转换
// 将 a 从36进制转为12进制
var a = 'ra'; // 36进制表示的数
parseInt(a, 36).toString(12); // "960"

数字对象 Number

Number对象是内置的数字对象,它封装了一系列Number相关的常量和方法。

var na = Number(8); // 8
na = Number('9.5'); // 9.5
na = new Number('9.3'); // Number 对象,仅可以使用原型方法

Number对象的属性:

属性 描述
Number.MAX_VALUE 可表示的最大值
Number.MIN_VALUE 可表示的最小值
Number.NaN 特指”非数字“
Number.NEGATIVE_INFINITY 特指“负无穷”;在溢出时返回
Number.POSITIVE_INFINITY 特指“正无穷”;在溢出时返回
Number.EPSILON 表示1和比最接近1且大于1的最小Number之间的差别
Number.MIN_SAFE_INTEGER JavaScript最小安全整数
Number.MAX_SAFE_INTEGER JavaScript最大安全整数

Number对象方法

Number对象方法可以使用 Number. 的形式调用,也可以使用全局调用。

方法 描述
Number.parseFloat() 把字符串参数解析成浮点数,左右等效于一元运算法+
Number.parseInt() 把字符串解析成特定基数对应的整型数字
Number.isFinite() 判断传递的值是否为有限数字
Number.isInteger() 判断传递的值是否为整数
Number.isNaN() 判断传递的值是否为 NaN
Number.isSafeInteger() 判断传递的值是否为安全整数

parseInt() 方法需要注意:

  • parseInt() 参数可以有两个参数:数字字符串和进制
  • 如果第一个参数为非指定进制的数字字符串,则结果为0
  • 如果第一个参数为非字符串,会首先调用该参数的toString()方法转换为字符串
  • 第一个参数中非指定进制可识别的字符会被忽略
  • 如果给定的字符串不存在数值形式,函数会返回一个特殊的值 NaN
  • 如果调用时没有提供第二个参数,则使用字符串表示的数字的进制
parseInt('123'); // 123
parseInt('123', 10); // 123
parseInt('123', 8); // 83
parseInt('123', 16); // 291
parseInt("11", 2); // 3
parseInt('0x123', 10); // 0
parseInt('0x123', 16); // 291
parseInt('0x123'); // 291
// 如果第一个参数不是字符串,会先把第一个参数转成字符串
parseInt('12', 16); // 18
parseInt(12, 16); // 18
// toString方法会将数字转换为10进制的字符串
parseInt(0xf, 16); // 21
0xf.toString(); // '15'
parseInt('15', 16); // 21
parseInt('23.56'); // 23
parseInt("hello", 16); // NaN
parseInt("aello", 16); // 174

Number类型原型方法

Number类型原型上还有一些方法来对数字进度进行取舍,这些方法可以被 Number 实例对象调用:

方法 描述
toExponential() 返回一个数字的指数形式的字符串
toFixed() 返回指定小数位数的表示形式
toPrecision() 返回一个指定精度的数字

这些原型方法可以被Number实例对象调用:

var numObj = 12345.6789;
numObj.toExponential(); // "1.23456789e+4"
numObj.toExponential(2); // "1.23e+4"
numObj.toExponential(4); // "1.2346e+4"
numObj.toPrecision();  // "12345.6789"
numObj.toPrecision(2); // "1.2e+4"
numObj.toPrecision(4); // "1.235e+4"
numObj.toFixed();   // 返回 "12346":进行四舍五入,不包括小数部分
numObj.toFixed(1);  // 返回 "12345.7":进行四舍五入
numObj.toFixed(6);  // 返回 "12345.678900":用0填充
(1.23e+20).toFixed(2); // 返回 "123000000000000000000.00"
(1.23e-10).toFixed(2); // 返回 "0.00"
2.34.toFixed(1);   // 返回 "2.3"
-2.34.toFixed(1);   // 返回 -2.3 (由于操作符优先级,负数不会返回字符串)
(-2.34).toFixed(1);  // 返回 "-2.3" (若用括号提高优先级,则返回字符串)

数学对象(Math)

和Number相关的是,JavaScript对象中内置的Math对象,提供了很多数学常数和函数的属性和方法。

属性列表:

属性 描述
Math.E 欧拉常数,也是自然对数的底数, 约等于 2.718
Math.LN2 2的自然对数, 约等于0.693
Math.LN10 10的自然对数, 约等于 2.303
Math.LOG2E 以2为底E的对数, 约等于 1.443
Math.LOG10E 以10为底E的对数, 约等于 0.434
Math.PI 圆周率,一个圆的周长和直径之比,约等于 3.14159
Math.SQRT2 2的平方根,约等于 1.414
Math.SQRT1_2 1/2的平方根, 约等于 0.707

Math中的三角函数 sin 等参数为弧度,如果是角度可以使用 (Math.PI / 180)

方法 描述
Math.abs(x) 返回x的绝对值
Math.sign(x) 返回x的符号函数, 判定x是正数,负数还是0
Math.random() 返回0到1之间的伪随机数
Math.floor(x) 返回x向上取整后的值
Math.ceil(x) 返回x向上取整后的值
Math.round(x) 返回四舍五入后的整数.
Math.fround(x) 返回数字的最接近的单精度浮点型表示
Math.trunc(x) 返回x的整数部分,去除小数
Math.sqrt(x) 返回x的平方根
Math.cbrt(x) 返回x的立方根
Math.hypot([x[,y[,…]]]) 返回其参数平方和的平方根
Math.pow(x,y) 返回x的y次幂
min(), max() 返回一个以逗号间隔的数字参数列表中的较小或较大值(分别地)
sin(), cos(), tan() 标准三角函数;参数为弧度
asin(), acos(), atan(), atan2() 反三角函数; 返回值为弧度
sinh(), cosh(), tanh() 双曲三角函数; 返回值为弧度.
asinh(), acosh(), atanh() 反双曲三角函数;返回值为弧度.
pow(), exp(), expm1(), log10(), log1p(), log2() 指数与对数函数

以上就是本次小编整理的关于JS数值Number类型知识点的全部内容,感谢你对三水点靠木的支持。

Javascript 相关文章推荐
网页自动刷新,不产生嗒嗒声的一个解决方法
Mar 27 Javascript
js判断选择时间不能小于当前时间的示例代码
Sep 24 Javascript
Javascript 多物体运动的实现
Dec 24 Javascript
JavaScript动态加载样式表的方法
Mar 21 Javascript
JS实现双击屏幕滚动效果代码
Oct 28 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
Apr 12 Javascript
分享一道关于闭包、bind和this的面试题
Feb 20 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
Dec 27 Javascript
jQuery 导航自动跟随滚动的实现代码
May 30 jQuery
利用hasOwnProperty给数组去重的面试题分享
Nov 05 Javascript
jQuery实现的简单日历组件定义与用法示例
Dec 24 jQuery
分享8个JavaScript库可更好地处理本地存储
Oct 12 Javascript
vue几个常用跨域处理方式介绍
Feb 07 #Javascript
vue项目中axios使用详解
Feb 07 #Javascript
vue-cli webpack2项目打包优化分享
Feb 07 #Javascript
浅谈es6中export和export default的作用及区别
Feb 07 #Javascript
Vue封装Swiper实现图片轮播效果
Feb 06 #Javascript
vue中如何使用ztree
Feb 06 #Javascript
javascript回调函数详解
Feb 06 #Javascript
You might like
php中的三元运算符使用说明
2011/07/03 PHP
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
2012/03/27 PHP
php微信公众号开发之翻页查询
2018/10/20 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
解放web程序员的输入验证
2006/10/06 Javascript
取键盘键位ASCII码的网页
2007/07/30 Javascript
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
js判断输入是否为数字的具体实例
2013/08/03 Javascript
jQuery+ajax简单实现文件上传的方法
2016/06/03 Javascript
举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
2016/07/07 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
2016/10/13 Javascript
JS仿QQ好友列表展开、收缩功能(第二篇)
2017/07/07 Javascript
在vue项目中安装使用Mint-UI的方法
2017/12/27 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
小程序实现列表多个批量倒计时
2021/01/29 Javascript
深入Node TCP模块的理解
2019/03/13 Javascript
浅谈vue中组件绑定事件时是否加.native
2019/11/09 Javascript
jQuery实现的分页插件完整示例
2020/05/26 jQuery
Python3.2模拟实现webqq登录
2016/02/15 Python
Python自定义函数定义,参数,调用代码解析
2017/12/27 Python
Django csrf 验证问题的实现
2018/10/09 Python
python 子类调用父类的构造函数实例
2020/03/12 Python
CSS3教程(5):网页背景图片
2009/04/02 HTML / CSS
css3实现可拖动的魔方3d效果
2019/05/07 HTML / CSS
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
捷克时尚网上商店:OTTO
2018/03/15 全球购物
升职自荐书范文
2013/11/28 职场文书
大学生的网络创业计划书
2013/12/26 职场文书
考试作弊被抓检讨书
2014/01/10 职场文书
民生工作实施方案
2014/05/31 职场文书
民主评议党员自我评价材料
2014/09/18 职场文书
教师拔河比赛广播稿
2014/10/14 职场文书
办公室卫生管理制度
2015/08/04 职场文书
高三数学复习备考教学反思
2016/02/18 职场文书
Spring Boot两种全局配置和两种注解的操作方法
2021/06/29 Java/Android
「睡美人」爱洛公主粘土人开订
2022/03/22 日漫