在一个相关问题中,我问过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 引擎中)。