我正在尝试Math.floor一个科学的符号,但有一点数字太大了,我现在的方法不再工作了。这就是我正在使用的atm
var nr = (number+"").length - 4;
if( nr > 1 ) {
nr = Math.pow( 10, nr );
number= Math.floor(number/nr)*nr;
number= number.toExponential(3);
}
当默认情况下它成为一种科学记数法时,我认为e20 +比我的.length方法不再适用,因为它返回的长度并不准确。我可以想到一个解决方法,然后找出e之后的数字,并将我的nr更新到Math.floor它,但是做这么简单的事情似乎做了很多工作。这是一个示例编号8.420960987929105e+79
我想将其转换为8.420e+79
,是否有一种方法可以Math.floor始终为第三个小数点,无论数字是多少?当我使用指数(3)时,它总是对数字进行舍入。我的数字可以很容易地达到e + 200,所以我需要一种更简单的方法来做我目前正在做的事情。
编辑:设法找到一个可以解决的问题,除了Connor Peet的答案,对于任何想要额外选项的人来说
var nr = 8.420960987929105e+79+"";
var nr1 = nr.substr(0,4);
var nr2 = nr.substr(4, nr.length);
var finalNr = Number(nr1 + 0 + nr2).toExponential(3);
这种方式更像是一种黑客攻击,它在第四个数字之后加了0,所以当指数向上舍入时,它会被“淹没”。差不多。
答案 0 :(得分:1)
前段时间我写了一个小片段来将数字四舍五入到一定数量的重要数字。您可能会发现它很有用
function sigFigs(num, figures) {
var delta = Math.pow(10, Math.ceil(Math.log(num) / Math.log(10)) - figures);
return Math.round(num / delta) * delta;
}
sigFigs(number, 3); // => 8.420e+79