JavaScript:精度问题

Javascript中为什么会存在精度问题:

·       JavaScript 内部只有一种数字类型Number,也就是说,JavaScript 语言的底层根本没有整数,所有数字都是以IEEE-754标准格式64位浮点数形式储存,1与1.0是相同的。因为有些小数以二进制表示位数是无穷的。JavaScript会把超出53位之后的二进制舍弃,所以涉及小数的比较和运算要特别小心。IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number)),一些特殊数值(无穷(Inf)与非数值(NaN)),以及这些数值的“浮点数运算符”;它也指明了四种数值舍入规则和五种例外状况(包括例外发生的时机与处理方式)。

精度现象举例

        加法:

0.1 + 0.2 
0.30000000000000000004

        减法:

0.3 - 0.1
0.1999999999999998

        乘法:

0.1 * 0.2
0.02000000000000000004

        除法:

0.3 / 0.1
0.9999999999999996

解决办法

  1. 使用小数运算库:可以使用一些第三方库,如Big.js或Decimal.js来处理精确的小数运算。这些库提供了更高精度的计算方法,可以避免精度丢失的问题。

  2. 转换为整数进行运算:可以将浮点数转换为整数进行运算,然后再将结果转换回浮点数。这样可以避免小数运算带来的精度丢失。例如,可以将小数乘以一个较大的倍数,将其转换为整数,并进行相应的运算,最后再将结果除以相同的倍数转换回浮点数

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值