章节翻译
7.1.12.1 NumberToString ( m )
抽象操作
NumberToString
将 Number 类型的变量 m 转换成 String 格式,步骤如下:
- 如果
m
等于NaN
,则返回字符串"NaN"
。- 如果
m
等于+0
或-0
,则返回字符串"0"
。- 如果
m
小于0
,则返回字符串"-"
和! NumberToString(-m)
。- 如果
m
等于+∞
, 则返回字符串"Infinity"
。- 否则,假设
n
、k
和s
都是整数,并且k ≥ 1
、10
k-1
≤ s < 10
k
,m
等于s × 10
n-k
,k
尽可能小。注意:k
表示s
(十进制表现形式)的位数,s
不能被 10 整除,并且s
的最低有效位数不必由这些标准唯一地确定。如果
k ≤ n ≤ 21
,则返回以下字符串:
s
的十进制表示的k
位数的代码单位(按顺序,没有前导零)- 出现
n-k
次代码单元 0x0030(DIGIT ZERO)如果
0 < n ≤ 21
,则返回以下字符串:
s
的十进制表示的最高n
位数的代码单元- 代码单元 0x002E (FULL STOP)
s
的十进制表示的剩余k-n
位的代码单元如果
-6 < n ≤ 0
,则返回以下字符串:
- 代码单元 0x0030 (DIGIT ZERO)
- 代码单元 0x002E (FULL STOP)
- 出现
-n
次代码单元 0x0030 (DIGIT ZERO)s
的十进制表示的k
位的代码单元否则,假如
k = 1
,则返回以下字符串:
- 单个位数
s
的代码单元- 代码单元 0x0065 (LATIN SMALL LETTER E)
- 如果
n-1
是正数,则返回代码单元 0x002B (PLUS SIGN),否则,返回代码单元 0x002D (HYPHEN-MINUS)- 整数
abs(n-1)
的十进制表示的代码单位(没有前导零)返回以下字符串:
s
的十进制表示的最高有效位的代码单元- 代码单元 0x002E (FULL STOP)
s
的十进制表示的剩余k-1
个位代码单元- 代码单元 0x0065 (LATIN SMALL LETTER E)
- 如果
n-1
是正数,则返回代码单元 0x002B (PLUS SIGN),否则,返回代码单元 0x002D (HYPHEN-MINUS)- 整数
abs(n-1)
的十进制表示的代码单位(没有前导零)
代码单元
典型例子
被忽略的符号
String(+NaN) // 'NaN'
String(-NaN) // 'NaN'
String(+0) // '0'
String(-0) // '0'
String(-1) // '1'
- 无论
NaN
带不带符号,数值都是NaN
- 第二步规定了对 0 的符号进行忽略
- 第三步之外的步骤都忽略了正数的符号
前导 0
String(99) // '99'
String(099) // '99'
见步骤 6、9、10
进制数
String(11) // '11'
String(011) // '9'
通通转换成十进制先。
科学计数法
String(1e20) // '100000000000000000000'
String(1e21) // '1e21'
String(1e-6) // '0.000001'
String(1e-7) // '1e-7'
- 步骤 6 描述了小于21位的正整数“正常显示”
- 步骤 7 有一个隐含条件未直说,即
n < k
。即,大于1的小数。 - 步骤 8 规定了小于 1 并且小数位前置 0 的位数小于 6 的小数。
- 步骤 9-10 规定了非以上情况下使用“科学计数法”。
精度丢失
String(1e20 + 1) // '100000000000000000000'
primitive value corresponding to a double-precision 64-bit binary format IEEE 754-2008 value