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
,这是错误的。这种情况下,我们基本忽略不计。
我正在学习 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
,这是错误的。这种情况下,我们基本忽略不计。