Javascript用0代替最后一个数字,而不是用指数表示法表示数字

问题描述

我有应该使用大数字的javascript代码,并希望它们以指数表示法显示。我不知道为什么x值的后4位被0代替,但是y值(甚至更大的数字)只是按预期方式显示-用指数表示法。然后我想显示带有固定点的x,它返回完全错误的值。以下代码在控制台中经过测试。知道为什么会这样吗?

 var y=1111111111111111111111111111111111111111     >     1.1111111111111112e+39  
 var x=111111111111111111111                        >     111111111111111110000
 Number(x).toFixed(4)                               >     "111111111111111114752.0000"
var y=1111111111111111111111111111111111111111;
console.log(y);
var x=111111111111111111111 ;
console.log(x);
console.log(Number(x).toFixed(4));

解决方法

toFixed()返回numObj的字符串表示形式,该字符串表示形式不使用指数表示法,并且精确到小数点后一位数字。如果需要,数字会四舍五入,如果需要,小数部分将用零填充,以使其具有指定的长度。如果numObj的绝对值大于或等于1e + 21,则此方法仅调用Number.prototype.toString()并以指数表示法返回字符串。

警告:浮点数不能精确地用二进制表示所有小数。这可能会导致意外结果,例如0.1 + 0.2 === 0.3返回false。

有关更多信息,请检查:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed

,

我认为数字不能将数据存储到这么多位数;在这两种情况下,它都存储17位数字,其余部分显示为指数部分;

1.111111111111111 2e+39  
11111111111111111 0000
|----------------| 17 digits

但是事实证明,js引擎决定以不包含指数部分的方式打印x,而0是由于内部存储大数字的方式所致;系统只能在小数点后存储这么多数字

您可以使用此

Number.isSafeInteger(x) //returns boolean to check if it is safe to use it

您可以在这里https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER

了解更多信息

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...