6.4 Number 类型
Number 类型是 JavaScript 中非常重要和常用的数据类型之一。Number 类型表示数值,可以用于存储和处理数值数据,包括整数、浮点数等。通常使用字面量的方式创建 number 类型的变量,例如:
var num1 = 3.14;
var num2 = 2.1;
var result = num1 + num2; // result的值为5.24
也可以使用 Number 函数创建,但是通常不会这么写:
var num1 = Number(3.14);
var num2 = Number(2.1);
var result = num1 + num2; // result的值为5.24
但是通常可以使用 Number 函数将其他类型变量转换成数字类型,例如:
var num1 = Number('3');
var num2 = Number(true);
var result = num1 + num2; // result的值为4
也常常使用一元加号(+)运算符把其他类型转成 Number 类型,例如:
var num1 = +'3';
var num2 = +true;
var result = num1 + num2; // result的值为4
JavaScript 提供了运算符可以对 Number 类型进行运算,例如加减乘除;Number 类型的原型上还提供给我 Number 类型提供一些实例方法对数值进行转换,例如 toFixed()方法将数值转换成指定小数位数的字符串,;JavaScript 还提供了一些其他的数学函数,如 Math.abs()、Math.sqrt()、Math.pow()、Math.max()、Math.min() 等等,这些函数可以对数值进行进一步的处理和运算;除了基本的数值处理和转换方法外,Number 类型对象还提供了一些常量,用于表示最大值、最小值、正无穷、负无穷、NaN 等特殊值。例如,可以使用 Number.MAX_VALUE 常量表示 Number 类型所能表示的最大值,使用 Number.NaN 常量表示非数字值等。 由于 Number 类型在 JavaScript 中的重要性和广泛应用,因此在进行 JavaScript 编程时,对 Number 类型的了解和掌握是非常重要的。
常用的实例方法
toFixed
JavaScript 中 Number 类型的 toFixed() 方法用于将数值转换为指定位数的小数字符串表示形式。
语法如下:
numObj.toFixed([digits])
参数 digits 是一个可选参数,表示要保留的小数位数,默认为 0。当 digits 参数为 0 时,会将数值四舍五入为最接近的整数,并返回整数字符串表示形式;当 digits 参数为其他值时,会将数值四舍五入为指定位数的小数,并返回小数字符串表示形式。当设置的 digits 大于原有数字的位数,则在尾部补 0。
如果参数 digits 小于 0 或大于 100,则抛出一个 RangeError 异常。有些资料上显示是 0 到 20,但是根据 ECMAScript 规范(第 11 版),toFixed() 方法的参数应该是一个介于 0 和 100(包括 0 和 100)之间的整数。实际在 chrome 浏览器中测试也是 0 到 100。
示例如下:
const num1 = 12345.6789;
console.log(num1.toFixed()); // 输出 "12346"
console.log(num1.toFixed(2)); // 输出 "12345.68"
console.log(num1.toFixed(6)); // 输出 "12345.678900"
const num2 = 123.456;
console.log(num2.toFixed(0)); // 输出 "123"
console.log(num2.toFixed(4)); // 输出 "123.4560"
console.log(num2.toFixed(10)); // 输出 "123.4560000000"
需要注意的是,toFixed() 方法返回的是一个字符串类型的值,而不是数值类型。如果需要将返回的字符串转换为数值类型,可以使用 Number() 方法或者一元加号(+)运算符进行转换,如下所示:
const num3 = 123.456;
const str = num3.toFixed(2); // 返回字符串 "123.46"
const num4 = Number(str); // 将字符串转换为数值类型
console.log(num4); // 输出 123.46
const num5 = +str; // 将字符串转换为数值类型
console.log(num5); // 输出 123.46
toPrecision
toPrecision() 方法用于将数值转换为指定位数的字符串表示形式。
语法如下:
numObj.toPrecision([precision])
参数 precision 是一个可选参数,表示要保留的有效数字位数,如果不传则默认保留所有数字。参数的取值返回是 1 到 100,如果不在这个范围则抛出一个 RangeError 异常。当设置的 precision 大于原有数字的有效位数,则在尾部补 0。
当 precision 参数为整数值时,会将数值四舍五入为固定的有效数字位数,并返回字符串表示形式,例如:
const num1 = 12345.6789;
console.log(num1.toPrecision()); // 输出 "12345.6789" 保留全部
console.log(num1.toPrecision(6)); // 输出 "12345.7" 四舍五入
注意它和 toFix 方法的区别是,toFix 只能控制小数点后面的位数,而 toPrecision 是控制总的有效数字位数,当设置总的有效数字位数已经无法表示数字的整数部分时转为科学计数法展示,例如:
const num1 = 12345.6789;
console.log(num1.toPrecision(5)); // 输出 12346
console.log(num1.toPrecision(4)); // 因为4位已经无法表示整数部分,转为科学计数法 "1.235e+4"
console.log(num1.toPrecision(2)); // 因为2位已经无法表示整数部分,转为科学计数法 "1.2e+4"
其中 1.2e+4 和 1.235e+4 就是科学计数法的展示
什么是科学计数法?
科学计数法,是一种用于表示极大或极小数值的方法。科学计数法中的数值由两个部分组成:基数和指数。基数是一个在 1 到 10 之间的小数(或整数),而指数是 10 的幂,指数可为正数或负数。将基数和指数相乘,就得到了完整的数值。 例如,数值 1234567 可以写成科学计数法的形式 1.234567 × 10^6,其中基数是 1.234567,指数是 6。在 JavaScript 中,科学计数法的语法是将一个数值使用指数形式来表示,即使用 e(可以小写或大写)将基数和指数分隔开,例如:
1.23e4; // 表示 1.23 × 10^4
5.67e-8; // 表示 5.67 × 10^-8
科学计数法的好处在于,它可以用较短的字符串表示非常大或非常小的数值,同时也方便进行科学计算。在计算机科学中,科学计数法也被广泛应用,例如表示浮点数、超大整数等。
toExponential
toExponential()方法 用于将一个数字转换成科学计数法的字符串表示形式。它的语法如下:
num.toExponential([fractionDigits])
其中:
- 1 num:要转换的数字;
- 2 fractionDigits:可选参数,表示指数部分显示的小数位数,范围为 0 到 20。 toExponential() 方法会返回一个字符串,表示输入数字的科学计数法形式。其中小数部分默认显示一位小数,但可以通过传入 fractionDigits 参数来设置显示的小数位数。 例如:
var num = 123456789;
console.log(num.toExponential()); // "1.23456789e+8"
console.log(num.toExponential(2)); // "1.23e+8"
console.log(num.toExponential(5)); // "1.23457e+8"
注意 toExponential 和 toPrecision 的区别: toExponential 是一定会返回科学计数法的字符串,参数是控制基数中小数的位置。
toString 方法
toString() 方法用于将数值转换为字符串。它的语法如下:
num.toString(radix);
其中,num 表示要转换的数值,radix 表示转换进制的基数,可选参数,默认为 10。当 radix 的值为 2 ~ 36 时,可以将数字转换成相应进制的字符串表示。当 radix 为其他值时,将返回原始数值的十进制字符串表示。
举个例子:
const num = 10;
console.log(num.toString()); // 输出 "10"
console.log(num.toString(2)); // 输出 "1010",二进制表示
console.log(num.toString(8)); // 输出 "12",八进制表示
console.log(num.toString(16)); // 输出 "a",十六进制表示
- 注意
直接用数字字面量调用number的方法会报错,例如:1.toFixed(1), 因为解析器会将 . 解释为数字字面量的一部分,而不是调用方法的操作符。为了解决这个问题,你可以使用括号将数字字面量括起来,例如 (1).toFixed(1)。使用括号将数字字面量括起来,可以明确指示解析器将其视为一个完整的表达式,从而可以正确调用 toFixed() 方法。 或者是使用变量,例如:
const num = 1;
const result = num.toFixed(1);
console.log(result); // 输出:1.0
如果数字字面量是小数的话 可以直接调用,因为小数中已经有了 . ,那么后面的 . 就可以被识别成是调用方法,例如:1.1.toFixed(1)
什么是进制?
进制是一种计数的方式,常见的进制包括二进制、八进制、十进制和十六进制。进制的基本概念是“位权”,每个数字位都有自己的位权,表示它在数字中的位置对结果的影响程度。以十进制为例,数字的每一位的位权是 10 的幂,从右向左位权依次为 1、10、100、1000、……。因此,数字 10 的各个位的位权分别为 1 和 10。同样的,二进制中的位权是 2 的幂,八进制中的位权是 8 的幂,十六进制中的位权是 16 的幂,依次类推。十六进制基数为 16 的数字系统,使用数字 0 到 9 和字母 A 到 F(或 a 到 f)来表示数字。 在计算机科学中,各种进制的应用十分广泛。二进制作为计算机内部表示数字的基本形式,十六进制常用于表示颜色、内存地址等信息。