0

在一个相关问题中,我问过parseInt() 错误地用指数解析数字文字

@Mark注意到,在不使用括号时,调用toFixed负整数(包含e字符的数字)会返回一个数字而不是字符串。

让我们看一个例子:

  • 负输入,不带括号

    > -3.67394039744206e-15.toFixed(19)
    -3.6739e-15
    > (-3.67394039744206e-15).toFixed(3)
    -0
    > -3.67394039744206e-15.toFixed(14)
    -0
    > -3.67394039744206e-15.toFixed(15)
    -4e-15
    > -3.67394039744206e-15.toFixed(16)
    -3.7e-15
    > -3.67394039744206e-15.toFixed(17)
    -3.67e-15
    > -3.67394039744206e-15.toFixed(18)
    -3.674e-15
    
  • 负数,带括号

    > (-3.67394039744206e-15).toFixed(19)
    '-0.0000000000000036739'
    > (-3.67394039744206e-15).toFixed(18)
    '-0.000000000000003674'
    > (-3.67394039744206e-15).toFixed(17)
    '-0.00000000000000367'
    > (-3.67394039744206e-15).toFixed(16)
    '-0.0000000000000037'
    > (-3.67394039744206e-15).toFixed(15)
    '-0.000000000000004'
    > (-3.67394039744206e-15).toFixed(14)
    '-0.00000000000000'
    > (-3.67394039744206e-15).toFixed(13)
    '-0.0000000000000'
    
  • 正数,带(外)括号

    > 3.67394039744206e-15.toFixed(14)
    '0.00000000000000'
    > 3.67394039744206e-15.toFixed(15)
    '0.000000000000004'
    > (3.67394039744206e-15).toFixed(16)
    '0.0000000000000037'
    
  • 负数,但没有指数

    > -3.toFixed(3)
    SyntaxError: Unexpected token ILLEGAL
        at Object.exports.createScript (vm.js:44:10)
        at REPLServer.defaultEval (repl.js:117:23)
        at bound (domain.js:254:14)
        at REPLServer.runBound [as eval] (domain.js:267:12)
        at REPLServer.<anonymous> (repl.js:279:12)
        at REPLServer.emit (events.js:107:17)
        at REPLServer.Interface._onLine (readline.js:214:10)
        at REPLServer.Interface._line (readline.js:553:8)
        at REPLServer.Interface._ttyWrite (readline.js:830:14)
        at ReadStream.onkeypress (readline.js:109:10)
    

为什么会这样?这是预期的吗?我会很好奇看到一些处理这个的代码片段(例如在 v8 引擎中)。

4

0 回答 0