Number.prototype.toString()
toString()
方法 Number
值返回表示此数值的字符串。
试一试
语法
toString()
toString(radix)
参数
radix
可选-
一个介于
2
和36
之间的整数,指定用于表示数值的基数。默认为 10。
返回值
表示指定数值的字符串。如果 radix 为 10 且数字的幅度(忽略符号)大于或等于 1021 或小于 10-6,则使用科学计数法。
异常
RangeError
-
如果
radix
小于 2 或大于 36,则抛出。 TypeError
-
如果此方法在不是
Number
的对象上调用,则抛出。
描述
Number
对象覆盖了 Object
的 toString
方法;它没有继承 Object.prototype.toString()
。对于 Number
值,toString
方法返回指定基数中值的字符串表示形式。
对于大于 10 的基数,字母表中的字母表示大于 9 的数字。例如,对于十六进制数(基数 16),使用 a
到 f
。
如果指定的数值为负数,则保留符号。即使基数为 2,情况也是如此;返回的字符串是在数值的正二进制表示形式前加上 -
符号,而不是数值的二进制补码。
0
和 -0
的字符串表示形式均为 "0"
。 Infinity
返回 "Infinity"
,而 NaN
返回 "NaN"
。
如果数字不是整数,则使用小数点 .
分隔小数位。如果基数为 10 且数字的幅度(忽略符号)大于或等于 1021 或小于 10-6,则使用科学计数法。在这种情况下,返回的字符串始终明确指定指数的符号。
console.log((10 ** 21.5).toString()); // "3.1622776601683794e+21"
console.log((10 ** 21.5).toString(8)); // "526665530627250154000000"
浮点数的底层表示形式是 2 为底的科学计数法(参见数字编码)。但是,toString()
方法不会直接使用此数值的最精确表示形式。相反,该算法使用区分输出与相邻数值所需的最少有效数字。例如,如果数字很大,则将有许多相同的浮点数的等效字符串表示形式,而 toString()
将选择右侧零最多的那个(对于任何给定的基数)。
console.log((1000000000000000128).toString()); // "1000000000000000100"
console.log(1000000000000000100 === 1000000000000000128); // true
另一方面,Number.prototype.toFixed()
和 Number.prototype.toPrecision()
允许您指定精度,并且可能比 toString()
更精确。
toString()
方法要求其 this
值为 Number
原语或包装器对象。对于其他 this
值,它会抛出 TypeError
,而不会尝试将其强制转换为数值。
因为 Number
没有 [Symbol.toPrimitive]()
方法,所以在期望字符串的上下文中(例如在模板字面量中)使用 Number
对象时,JavaScript 会自动调用 toString()
方法。但是,Number 原语值不会查询 toString()
方法以强制转换为字符串——而是使用与初始 toString()
实现相同的算法直接进行转换。
Number.prototype.toString = () => "Overridden";
console.log(`${1}`); // "1"
console.log(`${new Number(1)}`); // "Overridden"
示例
使用 toString()
const count = 10;
console.log(count.toString()); // "10"
console.log((17).toString()); // "17"
console.log((17.2).toString()); // "17.2"
const x = 6;
console.log(x.toString(2)); // "110"
console.log((254).toString(16)); // "fe"
console.log((-10).toString(2)); // "-1010"
console.log((-0xff).toString(2)); // "-11111111"
转换数字字符串的基数
如果您有一个用非十进制基数表示数字的字符串,则可以使用 parseInt()
和 toString()
将其转换为不同的基数。
const hex = "CAFEBABE";
const bin = parseInt(hex, 16).toString(2); // "11001010111111101011101010111110"
注意精度损失:如果原始数字字符串过大(例如,大于 Number.MAX_SAFE_INTEGER
),则应使用 BigInt
。但是,BigInt
构造函数仅支持表示数字字面量的字符串(即以 0b
、0o
、0x
开头的字符串)。如果您的原始基数不是二进制、八进制、十进制或十六进制之一,则可能需要手动编写基数转换器或使用库。
规范
规范 |
---|
ECMAScript 语言规范 # sec-number.prototype.tostring |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。