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

解释MDN上的JavaScript十进制舍入示例?,javascript,rounding,tostring,Javascript,Rounding,Tostring,我正在学习JavaScript,我听说在使用JavaScript的Math.round和.toFixed方法时,不同浏览器之间可能会出现问题。在这个网站上研究之后,我看到的批评最少的解决方案是十进制四舍五入法,如图所示 查看代码时,我被这部分弄糊涂了: function decimalAdjust(type, value, exp) { // If the exp is undefined or zero... if (typeof exp === 'undefined' || +exp

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

查看代码时,我被这部分弄糊涂了:

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”是不是暗示了什么?它是否与字符串一起存储在某个位置?它们真的是指指数吗

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

在科学记数法中,e是指数符号,当数字真的很大或很小时,你就可以在toString中得到它

例如,0.0000000000001产生1e-13

至于你问题的另一部分:


当不存在指数部分时,该方法也适用。在这种情况下,split函数返回一个单长度数组,因此值[1]变为未定义,这是错误的。在这种情况下,我们基本上忽略了它。

也许您没有在1111111111111111111111111111111111111.11上尝试过toString方法?请参阅,步骤9和10:返回由s的十进制表示形式的最高有效位组成的字符串,后跟小数点“.”,后跟剩余的k−s的十进制表示形式的1位数字,后跟小写字母“e”…在科学记数法中,e用来表示巨大的数字:aaaebbb是aaa*10^bbb。我知道如果你输入一个大数字,它会吐出一个“e”…我不知道它到底有多大…但是如果你想对一个相对较小的数字进行四舍五入呢?比如1.1111,四舍五入到第一百位?除了toString方法开始使用“e”的临界点之外,这种方法对任何事情都没有用处吗?在阅读了apsillers的评论并探索了链接之后,再看看下面Meskobalaz的答案,我已经找到了答案。非常感谢:我感谢你的回答,但这仍然回避了一个问题:如果你想对较小的数字(即更少的数字)使用十进制四舍五入,该怎么办?它是否仅在toString方法发现需要使用“e”来表示数字时才适用?谢谢:好的,我想我现在明白了。我不知道.split'e是一种用于较大表达式的过滤器。再次感谢,我还不能投票支持你,但我已经接受了你的回答: