MDN上的JavaScript十进制舍入示例的说明?

时间:2015-04-27 18:42:07

标签: javascript rounding tostring

我正在学习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'来自(哪里?每当我使用" toString()"在11.111等浮点数上的方法,我得到" 11.111"。是' e'不知何故暗示?它是否与字符串一起存储在某处?他们真的是指" toExponential()"?

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

1 个答案:

答案 0 :(得分:0)

e是科学记数法中的指数符号,当数字真的很大(或很小)时,你会在toString()得到它。

例如0.0000000000001会产生1e-13

至于问题的其他部分:

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