浮点精度笔记

本文探讨JavaScript中浮点数精度问题,如0.1+0.2不等于0.3,以及产生的原因——浮点数在64位二进制下的存储方式。文章提出了解决方法,包括乘以10再计算、使用toFixed和自定义方法,还介绍了Number对象的mytoFixed方法。此外,还涉及JavaScript的包装类型,如String、Boolean、Number的特性以及值类型和引用类型的区别。
摘要由CSDN通过智能技术生成

一、浮点精度问题
0.1+0.2=0.30000000000000004
0.2+0.3=0.5  没有精度问题
0.1+0.7= 0.7999999999999999
0.2+0.4=0.6000000000000001

0.3-0.2= 0.09999999999999998
1.5-1.2=0.30000000000000004

35.41*100=3540.9999999999995
19.9*100=1989.9999999999998

0.3/0.1=2.9999999999999996

1.产生原因
js数值型包含整数、浮点, ---Number  64位

  最高位--符号位     存储指数         尾数位--超出部分自动拾取
      1               11位            52位 

0.1
   0.0001100  1100  1100 .....(1100的循环)
0.2
   0.0011001100110011.....(0011的循环)

0.1+0.2 相加有,多余部分 被舍掉,产生误差

2、解决办法
  0.1+0.2=0.3
(1)乘以10,再计算
   (0.1*10+0.2*10)/10=0.3

(2)toFixed()   截取位数,四舍五入
  a=0.1+0.2
  a.toFixed(1)  0.3

  toFixed问题
  1.35.toFixed(1)      1.4
  1.335.toFixed(2)     1.33
  1.3335.toFixed(3)    1.333

      优化toFixed
   方法1:将获取的小数转换为字符串
           根据小数点的下标判断截取小数位数的下标
           判断截取小数的后一位
           四舍还是五入 对截取小数位进行操作
              Number.prototype.mytoFixed=function(b){
                  var a = this.toString() //11.334
                  var c = (a.substring(0,a.indexOf(".")+1)).length //3
                  var num =String(a).substring(0,c-1+b)//11.3
                  if(String(a)[c+b] >= 5){
         

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_诸葛亮晶晶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值