MDN 中 JavaScript 十进制舍入示例的解释?

Explanation of JavaScript Decimal Rounding example at MDN?

我正在学习 JavaScript,我听说在使用 JavaScript 的 Math.round() 和 .toFixed() 方法时,不同浏览器之间可能会出现问题.在这个网站上研究之后,我看到的最少批评的解决方案是如图所示的十进制舍入方法 at the MDN

查看代码,我对这部分感到困惑:

function decimalAdjust(type, value, exp) {
  // If the exp is undefined or zero...
  if (typeof exp === 'undefined' || +exp === 0) {
    return Math[type](value);
  }
  value = +value;
  exp = +exp;
  // If the value is not a number or the exp is not an integer...
  if (isNaN(value) || !(typeof exp === 'number' && exp % 1 === 0)) {
    return NaN;
  }
  // Shift
  value = value.toString().split('e');
  value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
  // Shift back
  value = value.toString().split('e');
  return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
}

具体来说,我对“value = value.toString().split('e');”这行感到困惑,它出现了大约五行从底部开始。

据我所知,JavaScript 正在将“值”更改为文本,然后在 'e' 处拆分它。这个 'e' 是从哪里来的?每当我在诸如 11.111 之类的浮点数上使用“toString()”方法时,我都会得到“11.111”。 'e' 是否以某种方式暗示?它与字符串一起存储在某个地方吗?它们真的是“toExponential()”的意思吗?

提前感谢您的任何意见,如果这是一个愚蠢的问题,我深表歉意。如果有人有更可靠的解决方案,请随时为我指明正确的方向。

e是科学记数法中的指数符号,真正大(或小)的时候在toString()中得到。

例如 0.0000000000001 产生 1e-13.

关于你问题的另一部分:

当没有指数部分时,该方法也适用。在这种情况下,split 函数 returns 是一个长度为一的数组,因此 value[1] 变为 undefined,这是错误的。这种情况下,我们基本忽略不计。