【发布时间】:2015-04-27 18:42:07
【问题描述】:
我正在学习 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()”的意思吗?
提前感谢您的任何意见,如果这是一个愚蠢的问题,我深表歉意。如果有人有更可靠的解决方案,请随时为我指明正确的方向。
【问题讨论】:
-
也许你还没有尝试过
1111111111111111111111111111111111111111111111111111.11上的toString方法?请参阅ES5, section 9.8.1,第 9 步和第 10 步:“返回由 s 的十进制表示的最高有效位组成的字符串,后跟一个小数点 '.',然后是 s 的十进制表示的剩余 k-1 位,后跟小写字符'e'..." -
e用于以科学计数法表示巨大的数字:aaaebbb是aaa * 10 ^ (bbb)。 -
我知道如果你输入一个很大的数字,它会吐出一个“e”(我不知道它到底有多大)......但是如果你想舍入一个相对较小的数字?比如1.1111,四舍五入到百分之一?除了 toString() 方法开始使用 'e' 的那个断点之外,这种方法不会无用吗?
-
在阅读了 apsillers 的评论并浏览了链接,以及查看了下面的 meskobalazs 的答案之后,我已经弄清楚了。非常感谢:)
标签: javascript rounding tostring