当在字符串上下文中使用时,JavaScript将超过21位的整数转换为科学符号。我打印了一个整数作为URL的一部分。我怎样才能阻止这种转变的发生?


当前回答

还有一个可能的解决方案:

function toFix(i){
 var str='';
 do{
   let a = i%10;
   i=Math.trunc(i/10);
   str = a+str;
 }while(i>0)
 return str;
}

其他回答

你可以使用number.toString(10.1):

console.log(Number.MAX_VALUE.toString(10.1));

注意:这目前适用于Chrome,但不适用于Firefox。规范规定基数必须是整数,所以这会导致不可靠的行为。

function printInt(n) { return n.toPrecision(100).replace(/\..*/,""); }

有一些问题:

0.9显示为“0” -0.9显示为"-0" 1e100显示为“1” 仅适用于~1e99 =>以下的数字,对于更大的数字使用其他常数;或者更小的优化。

对于较小的数字,并且您知道需要多少小数,您可以使用toFixed,然后使用regexp删除后面的零。

Number(1e-7).toFixed(8).replace(/\.?0+$/,"") //0.000

使用。toprecprecision, . tofixed等。您可以通过将数字转换为. tostring的字符串,然后查看其.length来计算数字中的位数。

如果您只是为了显示而这样做,您可以从四舍五入之前的数字构建一个数组。

var num = Math.pow(2, 100);
var reconstruct = [];
while(num > 0) {
    reconstruct.unshift(num % 10);
    num = Math.floor(num / 10);
}
console.log(reconstruct.join(''));