【JavaScript】 数值 Number
程序开发
2023-09-07 07:51:04
目录
1 数值 number
js 数值
es6 数值
1.1 数值储存
JavaScript 内部,所有数字都是以 64 位浮点数形式储存,即使整数也是如此。所以,1
与1.0
是相同的,是同一个数。
0.1 + 0.2 === 0.3;
// false0.3 / 0.1;
// 2.9999999999999996(0.3 - 0.2) === 0.2 - 0.1;
// false
你知道 0.1 + 0.2 !== 0.3 是进制问题,但你讲不出个所以然,是吧?
用了一天时间,我终于彻底搞懂了 0.1 + 0.2 是否等于 0.3!
// 0.1 化为二进制:
0.000 11001100 11001100 11001100 11001100 11001100 11001100 1100 1100 11
// 0.1 保留 52 位有效数字:
0.000 11001100 11001100 11001100 11001100 11001100 11001100 1101 0// 0.2 化为二进制:
0.00 11001100 11001100 11001100 11001100 11001100 11001100 1100 1100 11
// 0.2 保留 52 位有效数字:
0.00 11001100 11001100 11001100 11001100 11001100 11001100 1101 0// 0.1+0.2:
0.000 11001100 11001100 11001100 11001100 11001100 11001100 1101 0
0.001 10011001 10011001 10011001 10011001 10011001 10011001 1010
————————————————————————————————————————————————————————————————————
0.010 01100110 01100110 01100110 01100110 01100110 01100110 0111 0
// 保留 52 位尾数
0.010 01100110 01100110 01100110 01100110 01100110 01100110 100 即
0.0 10011001 10011001 10011001 10011001 10011001 10011001 1010 0
// 转十进制
0.30000000000000004
// 解决方法
let value = value * Math.pow(10, props.precision);
let stepValue = stepValue * Math.pow(10, props.precision);showValue = value + stepValue;showValue = (showValue / Math.pow(10, props.precision)).toFixed(props.precision
);showValue = Number(showValue);
1.2 数值表示
科学计数法表示
123e3; // 123000
123e-3; // 0.123
3.1e12;
0.1e-23;
1.2.1 数值分隔符
下面三个将字符串转成数值的函数,不支持数值分隔符。主要原因是语言的设计者认为,数值分隔符主要是为了编码时书写数值的方便,而不是为了处理外部输入的数据。
Number("123_456"); // NaN
parseInt("123_456"); // 123
1.3 特殊数值
1.3.1 正零和负零
1.3.2 NaN
NaN === NaN; // false
1.3.3 Infinity
Infinity
表示正的无穷,-Infinity
表示负的无穷。// 场景一
Math.pow(2, 1024);
// Infinity// 场景二
0 / 0; // NaN
1 / 0; // Infinity
1.4 数值相关的全局方法
isNaN("Hello"); // true
// 相当于
isNaN(Number("Hello")); // true
1.5 Number 对象
js Number 对象
1.5.1 Number()
1.5.2 Number 静态属性
Number.MAX_SAFE_INTEGER
:=== Math.pow(2, 53) - 1
Number.MIN_SAFE_INTEGER
:=== -Number.MAX_SAFE_INTEGER
1.5.3 Number 静态方法
Number.parseInt()
方法用于将字符串转为整数。
Number.parseFloat()
方法用于将一个字符串转为浮点数。
Number.isInteger()
用来判断一个数值是否为整数。
1.5.4 Number 实例方法
Number.prototype.toFixed()
方法先将一个数转为指定位数的小数,然后返回这个小数对应的字符串。 (10.005).toFixed(2); // "10.01"
Number.prototype.toExponential()
将一个数转为科学计数法形式Number.prototype.toPrecision()
方法用于将一个数转为指定位数的有效数字。Number.prototype.toLocaleString()
方法接受一个地区码作为参数,返回一个字符串,表示当前数字在该地区的当地书写形式。1.5.5 自定义方法
与其他对象一样,Number.prototype
对象上面可以自定义方法,被Number
的实例继承。
1.6 Math 对象
js Math 对象
Math
是 JavaScript 的原生对象,提供各种数学功能。该对象不是构造函数,不能生成实例,所有的属性和方法都必须在Math
对象上调用
1.6.1 Math 静态属性
这些属性都是只读的,不能修改。
1.6.2 Math 静态方法
1.7 BigInt
ES2020 引入了一种新的数据类型 BigInt(大整数),来解决这个问题,这是 ECMAScript 的第八种数据类型。BigInt 只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示。
1234; // 普通整数
1234n; // BigInt// BigInt 的运算
1n + 2n; // 3n
1.7.1 BigInt()
1.7.2 BigInt 实例方法
1.7.3 BigInt 静态方法
标签:
上一篇:
MongoDB 2: 安装和使用
下一篇:
相关文章
-
无相关信息