数值类型

数值类型包含几乎所有的数字——整数、小数、正数、负数等。

以下为数值类型变量的声明示例。

let totalPrice: number = 199.99;
let discount: number = -9.99;
let itemCount: number = 5;

数值类型变量默认以十进制来表示(见以上示例),但也可以用 0b 表示二进制,用 0o 表示八进制,用 0x 表示十六进制来声明变量,示例代码如下。

let hexNumber: number = 0xf01e;
let binaryNumber: number = 0b1011;
let octalNumber: number = 0o456;

数值类型变量实质上是一个 64 位的浮点数。它使用 53 位表示小数位,10 位表示指数位,1 位表示符号位。

该类型变量所能表示的最大的数值为1.797 693 134 862 315 7×10308,它能表示的最小的正数值为 5×10−324。分别通过访问 Number 对象的 MAX_VALUE 属性与 MIN_VALUE 属性查看最大值和最小正值,示例代码如下。

console.log(Number.MAX_VALUE);
console.log(Number.MIN_VALUE);

输出结果如下。

> 1.7976931348623157e+308
> 5e-324

如果要取整数的范围,该类型能够准确表示的整数范围为 −253~253,超过这个范围就无法精确表示这个整数,除非使用长整型,下一节会详细介绍。分别通过访问 Number 对象的 MAX_SAFE_INTEGER 属性与 MIN_SAFE_INTEGER 属性查看最大允许值和最小允许值,示例代码如下。

console.log(Number.MAX_SAFE_INTEGER);
console.log(Number.MIN_SAFE_INTEGER);

输出结果如下。

> 9007199254740991
> -9007199254740991

数值类型变量不仅可以用于逻辑运算,例如,相等判断(运算符为 =====)、数字大小判断(运算符为 <>),还可以用于算术运算,例如,基本的加减乘除计算(运算符为 +*/)等。

浮点数在进行算术运算时的精度不如整数的高,有时候会出现一些奇怪的情况,例如,以下代码中,ab 的和理论值应该为 0.3,用它们的和与 0.3 比较,结果会出乎意料。因此切勿用某些特定组合(如 0.1 与 0.2 的和)来进行比较。

let a: number = 0.1;
let b: number = 0.2;
if (a + b == 0.3) {
    console.log("比较结果相等");
}
else {
    console.log(a + b);
    console.log("比较结果不相等");
}

输出结果如下。

> 0.30000000000000004
> 比较结果不相等