猿问

如何避免对JavaScript中的大数进行科学表示法?

如何避免对JavaScript中的大数进行科学表示法?

当数字变大时,JavaScript将大int转换为科学表示法。我怎样才能防止这种情况发生?



繁星点点滴滴
浏览 510回答 3
3回答

回首忆惘然

有数字固定,但如果数字>=1e21,且最大精度为20,则使用科学表示法。除此之外,您还可以使用自己的方法,但这会很麻烦。function&nbsp;toFixed(x)&nbsp;{ &nbsp;&nbsp;if&nbsp;(Math.abs(x)&nbsp;<&nbsp;1.0)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;e&nbsp;=&nbsp;parseInt(x.toString().split('e-')[1]); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(e)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;*=&nbsp;Math.pow(10,e-1); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&nbsp;'0.'&nbsp;+&nbsp;(new&nbsp;Array(e)).join('0')&nbsp;+&nbsp;x.toString().substring(2); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;e&nbsp;=&nbsp;parseInt(x.toString().split('+')[1]); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(e&nbsp;>&nbsp;20)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e&nbsp;-=&nbsp;20; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;/=&nbsp;Math.pow(10,e); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;+=&nbsp;(new&nbsp;Array(e+1)).join('0'); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;} &nbsp;&nbsp;return&nbsp;x;}上面使用的是廉价的-‘n’-简单的字符串重复((new Array(n+1)).join(str))。你可以定义String.prototype.repeat用俄国农民乘法代替那个。这个答案只适用于问题的上下文:在不使用科学符号的情况下显示大量数字。对于其他任何事情,您都应该使用BigInt库,例如BigNumber利蒙氏BigInt,或BigInteger..展望未来BigInt(注意:不是Leemon‘s)应该是本地支持的(铬有了支持,而且正在为火狐).

慕仙森

对于较小的数字,而且您知道需要多少小数,您可以使用toFix,然后使用regexp删除尾随零。Number(1e-7).toFixed(8).replace(/\.?0+$/,"")&nbsp;//0.000

桃花长相依

我知道这是个老问题,但最近很活跃。MDN到LocaleStringconst&nbsp;myNumb&nbsp;=&nbsp;1000000000000000000000;console.log(&nbsp;myNumb&nbsp;);&nbsp;//&nbsp;1e+21console.log(&nbsp;myNumb.toLocaleString()&nbsp;);&nbsp; //&nbsp;"1,000,000,000,000,000,000,000"console.log(&nbsp;myNumb.toLocaleString('fullwide',&nbsp;{useGrouping:false})&nbsp;);&nbsp;//&nbsp;"1000000000000000000000"您可以使用选项来格式化输出。注:在小数点16位之后,Number.toLocaleString()循环,所以.const&nbsp;myNumb&nbsp;=&nbsp;586084736227728377283728272309128120398;console.log(&nbsp;myNumb.toLocaleString('fullwide',&nbsp;{&nbsp;useGrouping:&nbsp;false&nbsp;})&nbsp;);.回来.586084736227728400000000000000000000000如果精确性在预期的结果中很重要,这可能是不可取的。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答