Skip to content

Number

Number 以 64 位的格式 IEEE-754 存储,也被称为“双精度浮点数”。

只要是 IEEE-754 的都会存在计算不精准的问题,如 0.1 + 0.2 并不等于 0.3。

在 JavaScript 中进行数学运算,是安全的。
无论你怎么弄,它不会报错,不会 Error(NaN) ,但是代价是 特殊数值(special numeric values):

  • Infinity / 无穷大
  • -Infinity
  • NaN / Not a Number

与 NaN 进行运算只会得到 NaN。

_

_ 只会优化显示

js
let billion = 1000000000;

// 二者相同,不会发生任何副作用。

let billion = 10_0000_0000;

e

e9 代表后面 9 个 0;

js
let billion = 1e9;
// 二者相同
let billion = 10_0000_0000;

-e

js
(1e-3 == 1 / 1000) == 0.001;

Binary、Octal、Hex

Binary —— 2 进制
Octal8 —— 进制
Hex16 —— 进制

js
let a = 0b11111111; // b 二进制
let b = 0o377; // o 八进制
let c = 0xff; // x 十六进制 ;

十六进制大小写都是可以的

进制转换

100..toString(2);

parseInt("1100100", 2);

toString(base)的 base 最大支持 36

rounding

floor 向后

ceil 向前

round 四舍五入

trunc 移除 小数点后数字

小数点后两位

js
Math.floor(num * 100) / 100;
// 或
num.toFixed(2);

toFixed 的结果是字符串。
有点是,例如 12 这样的整数,他会给你补为 12.00。

NaN 和 Infinity

NaN 代表一个错误,并且 NaN 是不等于 NaN

Infinity(和 -Infinity)是一个特殊的数值,比任何数值都大(小)

apis:

isNaN 判断是否为 NaN。若有必要,则首先将值转换为数字。

Number.isNaN 不会转换类型,为更优解。

isFinite 判断是否为 finite number( 有限数值)。在必要情况下,参数会首先转为一个数值。

Number.isFinite 同理,不会转换。

Object.is

Object.is 和 === 几乎相同,但是有两点例外

  1. Object.is 能识别 NaN
  2. Object.is 能区分 0 和 -0
js
Object.is(NaN, NaN); // true
Object.is(0, -0); // false

parseInt 和 parseFloat

从 string 中读取 number。读到不能读为止。

js
parseInt("bhl41i"); // NaN
parseInt("bhl41i", 36); // 694666422

parseInt("  100 0 "); // 100

parseInt("100c"); // 100
parseInt("c100"); // NaN!!

parseInt("192.168.0.1"); // 192
parseFloat("192.168.0.1"); // 192.168

Math

random 随机数

max min

pow(n, power),和 n ** power 一样的