ES2018 学习笔记(1)NumberToString

章节翻译

7.1.12.1 NumberToString ( m )

抽象操作 NumberToString 将 Number 类型的变量 m 转换成 String 格式,步骤如下:

  1. 如果 m 等于 NaN,则返回字符串 "NaN"
  2. 如果 m 等于 +0-0,则返回字符串 "0"
  3. 如果 m 小于 0,则返回字符串 "-"! NumberToString(-m)
  4. 如果 m 等于 +∞, 则返回字符串 "Infinity"
  5. 否则,假设 nks 都是整数,并且 k ≥ 110k-1≤ s < 10km 等于 s × 10n-kk 尽可能小。注意:k 表示 s(十进制表现形式)的位数,s 不能被 10 整除,并且 s 的最低有效位数不必由这些标准唯一地确定。
  6. 如果 k ≤ n ≤ 21,则返回以下字符串:

    • s 的十进制表示的 k 位数的代码单位(按顺序,没有前导零)
    • 出现 n-k 次代码单元 0x0030(DIGIT ZERO)
  7. 如果 0 < n ≤ 21,则返回以下字符串:

    • s 的十进制表示的最高 n 位数的代码单元
    • 代码单元 0x002E (FULL STOP)
    • s 的十进制表示的剩余 k-n 位的代码单元
  8. 如果 -6 < n ≤ 0,则返回以下字符串:

    • 代码单元 0x0030 (DIGIT ZERO)
    • 代码单元 0x002E (FULL STOP)
    • 出现 -n 次代码单元 0x0030 (DIGIT ZERO)
    • s 的十进制表示的 k 位的代码单元
  9. 否则,假如 k = 1,则返回以下字符串:

    • 单个位数 s 的代码单元
    • 代码单元 0x0065 (LATIN SMALL LETTER E)
    • 如果 n-1 是正数,则返回代码单元 0x002B (PLUS SIGN),否则,返回代码单元 0x002D (HYPHEN-MINUS)
    • 整数 abs(n-1) 的十进制表示的代码单位(没有前导零)
  10. 返回以下字符串:

    • 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

你可能感兴趣的:(javascript)