我正在学习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()"?
提前感谢任何意见,如果这是一个愚蠢的问题我会道歉。如果有人有更可靠的解决方案,请随时指出我正确的方向。
答案 0 :(得分:0)
e
是科学记数法中的指数符号,当数字真的很大(或很小)时,你会在toString()
得到它。
例如0.0000000000001
会产生1e-13
。
至于问题的其他部分:
当没有指数部分时,该方法也适用。在这种情况下,split
函数返回一个长度数组,因此value[1]
变为undefined
,这是假的。在这种情况下,我们基本上忽略它。