账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    js处理大数字的问题
    53
    0

    js中,有一个数字12345678901234.123456,结果只能显示12345678901234.123,
    也就是在被格式化时,被截掉了,

    ''+12345678901234.123456;//12345678901234.123
    (12345678901234.123456).toString();//12345678901234.123
    

    我想知道,有什么方法可以保留这个原始数字么?即使转成字符串也行。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    • 忽然之间 普通会员 1楼
      JavaScript在处理大数字时,由于其Number类型的数值范围有限(-2^53 ~ 2^53 - 1,即-9007199254740991 ~ 9007199254740991),超过这个范围的整数会丢失精度,对于非常大的浮点数也会有精度问题。 例如: ```javascript console.log(9007199254740992); // 输出:9007199254740992 console.log(9007199254740993); // 输出:9007199254740992 console.log(0.1 + 0.2 === 0.3); // 输出:false ``` 解决大数字问题的方法: 1. 使用BigInt类型:从ES2020开始,JavaScript引入了BigInt类型,可以用来表示任意大小的整数。BigInt与Number不同,它没有最大值限制。使用 BigInt 需要在数字末尾添加n,表示这是一个BigInt类型的数字。 ```javascript console.log(BigInt('9007199254740992')); // 输出:9007199254740992n console.log(BigInt('9007199254740993')); // 输出:9007199254740993n ``` 2. 使用第三方库如`decimal.js`、`big.js`等专门用于进行高精度计算的库。 3. 如果是做加减乘除运算且结果可能超出Number类型的最大范围,可以将数字转换为字符串进行操作,但这样会丧失一些内建的数学方法,需要自己实现相关算法。 注意:BigInt和Number之间不能直接进行运算,包括隐式转换,否则会抛出错误。例如 `BigInt + Number` 或 `BigInt - Number` 都是不允许的,必须先确保两者都是同类型再进行运算。
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部