1.js中数字

1.数字存储

Javascript中所有数字的存储都是64位浮点数。整数也一样。

1 === 1.0 // true

2. 数字大小范围

可以表示的最大正数和最小负数

(-Math.pow(2, 1024), Math.pow(2,1024)) // 开区间
// 等同于
-Number.MAX_VALUE ~ Number.MAX_VALUE // -(2**1023)*1.9999999999999998 ~ (2**1023)*1.9999999999999998
// 如果等于Math.pow(2,1024),正向溢出Infinity
Number.POSITIVE_INFINITY
// 如果-Math.pow(2, 1024)
Number.NEGATIVE_INFINITY

小数的最小取值,即可以取到的最小的正数

Math.pow(2, -1074); // 5e-324
// 还可以表示为
Number.MIN_VALUE // 5e-324 Math.pow(2, -1075); // 0
// 指数大于-1075的可以计算,<=1075"负向溢出",等于0

3. 数字精度

js中64位存储位,有52位用于精度,加上默认的1,一共53位用于表示精度。

可以表示的正负数的精度大小:

-Math.pow(2, 53) ~ Math.pow(2, 53); // 开区间;(-9007199254740992, 9007199254740992),
// 也可以表示成闭区间
[-Math.pow(2, 53)+1, Math.pow(2, 53)-1],
// 即[-9007199254740991, 9007199254740991]
// 可以表示成-Number.MAX_SAFE_INTEGER~ Number.MAX_SAFE_INTEGER

由上面可知,精度最大是16位的十进制数,超过16位的十进制数就会失去精度。

4. 科学计数法

js在下面两种情况下,会将数字自动转为科学技术法表示:

1)数字大小超过21位

100000000000000000000  // 21位
1000000000000000000000 // 22位,1e+21

2)小数点后的0超过5位,小数点前也是0

0.000001 // 0.000001
0.0000001 // 1e-7

之所以要注意科学计数法的原因是,有的时候在运算中,js自动进行类型转换,会导致意外结果。

比如5中使用解析函数,parseInt等

5. 字符串解析成数字

Number.parseInt(str[, N进制数])--字符串解析成十进制整数

功能和parseInt一样;但是最好使用Number.parseInt(),代码模块化

将N(2-36)进制的字符串转为十进制的正数,如果第一个参数不是字符串,先转为字符串

Number.parseInt(0.0000003); //
// 这个属于科学计数法的第二种情况,js自动转为3e-7, 函数将其转为'3e-7'
// 等同于
Number.parseInt('3e-7'); //3 只解析数字的部分 Number.parseInt(''); // NaN
Number.parseInt(12.45); //
Number.parseInt('12ddd'); //

其他进制转十进制

Number.parseInt(22.45); //
Number.parseInt(22.45, 2); // NaN, 无效的二进制数
Number.parseInt(22.45, 8); // 18, 将8进制的22转为十进制

Number.parseFloat(str) --- 将字符串转为浮点数

有几个特殊值需要注意

Number.parseFloat(''); // NaN   Number('') === 0
Number.parseFloat(null); // NaN Number(null) === 0
Number.parseFloat([]); // NaN Number([]) === 0
// undefined时,和Number()相同
Number.parseFloat(undefined);// NaN
Number.parseFloat(true); // NaN Number(true) === 1
Number.parseFloat('12.45f'); // 12.45 区别于Number('12.45f') ===NaN

6. 特殊数值

1. NaN

NaN不等于自身;但是Object.is中相等;

Object.is(NaN, NaN); //true
NaN === NaN; // false

一些特殊值之间运算后NaN

5-'x'; // NaN
0/0; //NaN
0*Infinity; // NaN
null*Infinity; // NaN 相当于0*Infinity
Infinity-Infinity; //NaN
Infinity/Infinity; //NaN
undefined+Infinity; //NaN 相当于 NaN + Infinity

NaN和任意值的运算结果都是NaN

2.+0和-0

两者相等,有两种特殊情况

// 1)在Object.is()中不相等
Object.is(+0, -0); // false
// 2) 非零值除
9/0 ;// Infinity
9/-0; // -Infinity

2. Number对象

既是构造函数,还可以作为工具函数。

1. 静态方法

1. Number.isNaN(param)/isNaN(param)---判断是否NaN

两者的区别是,前者先判断参数类型,类型不是NaN,直接返回false,不会进行转化;

isNaN会先将参数转为数值,然后再判断

Number.isNaN('d'); //false
isNaN('d'); // true

2.Number.isFinite(param)/isFinite(param) --判断值是否有限

除了Infinity, -Infinity, NaN, undefined,其他的数值全部返回true;

区别:前者先判断值类型,值类型不是number,直接返回false;

后者如果不是数值类型,先转化为数值类型

Number.isFinite('12'); // false
isFinite('12'); // true

3.Number.parseInt()/ Number.parseFloat()

4.Number.isInteger(number)--判断一个值是否是整数

先判断数据类型,如果数据类型不符合,直接返回false;

然后判断是否为整数,或者其他的特殊情况

Number.isInteger(true); // false
Number.isInteger(''); //false
Number.isInteger(25.0); //true js中25.0===25
Number.isInteger(Number.MIN_VALUE*0.5); // true 当小于最小正数
Number.isInteger(1.0000000000000004); //false 小数点后16位
Number.isInteger(1.00000000000000004); // true 小数点后17位

5. Number.isSafeInteger(number)--判断整数是否在精度范围

先判断数据类型,后判断是否在精度范围内的整数,-2^532^53之间(不含两个端点)。

Number.isSafeInteger(Number.MIN_SAFE_INTEGER - 1) // false
Number.isSafeInteger(Number.MIN_SAFE_INTEGER) // true
Number.isSafeInteger(Number.MAX_SAFE_INTEGER) // true
Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1) // false
// 有一点需要注意,对于运算符两侧的数值来说,每个值都要复合,才能得出正确的结果
Number.isSafeInteger(9007199254740993 - 990)
// true
9007199254740993 - 990
// 返回结果 9007199254740002
// 正确答案应该是 9007199254740003

2. 实例方法

1.toString([N进制])--将数值转为N进制字符串

默认转为10进制,指定后转为指定的进制

(0x11).toString(); // "17"
(0x11).toString(2); // "10001"

2. toFixed(number) --将数值转为固定小数位数的字符串

(10.005).toFixed(2); // "10.01"

3. toExponential(number)--转为科学计数法表示的字符串

number表示小数的个数

(10).toExponential(2);  // "1.00e+1"

4. toPrecision(number)--转为固定有效数字的字符串

number表示所有有效数字的长度

(10).toPrecision(5); // "10.000"

3.Math对象

Math就是一个对象,不是构造函数。

1.静态属性--只读属性

1. Math.PI---

数值(Number,Math, 运算符)的更多相关文章

  1. Java 学习(6):java Number & Math & String & 数组...常用类型

    目录 --- Number & Math类 --- Character 类 --- String 类 --- StringBuffer 类 --- 数组 Number & Math类: ...

  2. Java基础(四):Java Number & Math 类、Character 类、String 类、StringBuffer & StringBuilder 类

    一.Java Number & Math 类: 1.Number类: 一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double 等.然而,在实际开发 ...

  3. Java-Runoob:Java Number & Math 类

    ylbtech-Java-Runoob:Java Number & Math 类 1.返回顶部 1. Java Number & Math 类 一般地,当需要使用数字的时候,我们通常使 ...

  4. Number & Math

    Java Number & Math 类 一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double 等. 实例 int a = 5000; floa ...

  5. [常用类]Number & Math 类(转载)

    下面的表中列出的是 Number & Math 类常用的一些方法: 序号 方法与描述 1 xxxValue() 将 Number 对象转换为xxx数据类型的值并返回. 2 compareTo( ...

  6. es6字符串、数值、Math的扩展总结

    字符串的扩展 1.for...of遍历字符串 2.includes()判断字符串中是否包含某个字符串,返回bool 3.startsWith(),endsWith()分别盘对字符串的头部和尾部是否含有 ...

  7. JavaScript 数值Number类型详解

    Number 问题 如果下面的问题你都能回答对了吗? 0.1 + 0.2 == 0.3 成立吗? .e-5 表示多少? 怎么表示8进制? 怎么转换进制? 如何将字符串转换成数值或整数?反过来呢?十六进 ...

  8. Java Number & Math 类

    // java.lang.Math 常用 // xxxValue() 方法用于将 Number 对象转换为 xxx 数据类型的值并返回. System.out.println(((Integer) 5 ...

  9. 1.1 JAVA装箱和拆箱以及Java Number & Math&Character 类

    JAVA装箱和拆箱 从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了.原文链接: http://www.cnblogs.com/dolph ...

随机推荐

  1. SysTick 定时实验(中断)

    实验目的:利用 SysTick 产生 1s 的时基,LED 以 1s 的频率闪烁. 编程要点 1.设置重装载寄存器的值 2.清除当前数值寄存器的值 3.配置控制与状态寄存器 过程 我们创建了两个文件: ...

  2. Apache2.4+Tomcat7.0+php5.5整合配置详解

    在上一篇的基础上,继续添加php的配置 一.首先下载php5.5 首先下载php5.5,到官网下载http://www.php.net/downloads.php,参考http://www.cnblo ...

  3. hdu 4857 反向拓扑问题

    尤其要注意拓扑的分层问题 不难理解 就是不怎么好想到 拓扑的思路这里就不累述了 #include <iostream> #include <cstdio> #include & ...

  4. 在论坛中出现的比较难的sql问题:5(row_number函数 分页、随机返回数据)

    原文:在论坛中出现的比较难的sql问题:5(row_number函数 分页.随机返回数据) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. 1.在inner join后, ...

  5. 【Transact-SQL】计算整个表中所有值的出现的次数

    原文:[Transact-SQL]计算整个表中所有值的出现的次数 一个表有3列,5行,那么一共有15个值,现在要计算整个表中所有值在表中出现的次数,不过这里表的列数是不确定的,上面的例子是3列,实际上 ...

  6. MarkDown 语法记录

    Markdown是一种纯文本格式的标记语言.通过简单的标记语法,它可以使普通文本内容具有一定的格式. 为啥要用 MarkDown 呢? 优点 1.因为是纯文本,所以只要支持Markdown的地方都能获 ...

  7. 字符串slice、substring、substr

    1.slice() 可以为负数,如果起始位置为负数,则从字符串最后一位向前找对应位数并且向后取结束位置,如果为正整数则从前往后取起始位置到结束位置. 2.substring() 只能非负整数,截取起始 ...

  8. windows的一些常用指令

    持续更新中..... 1.清除系统内 DNS 的缓冲  :  nslookup baidu.com 2.修改hosts文件  :  位置 运行  ->  C:/windows/system32/ ...

  9. 关于reduce

    arr.reduce( callback,[initialValue]) reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素 callback (执行数组中每个值 ...

  10. iOS自定义一个仿网易左右滑动切换页面框架

    FSScrollContentView github:https://github.com/shunFSKi/FSScrollContentView 这是本人在整理项目时抽离了业务代码整理封装的一个通 ...