使用Java或JS解决0.1+0.2≠0.3的问题

相信小伙伴们在编程的时候会遇到这种问题,在进行浮点数运算有时得到结果会带有一个"小尾巴",就像下面这样:
先跑一段Java代码:
在这里插入图片描述

出BUG了吗???
刚学习编程的小伙伴可能会摸不着头脑,经过测试这个问题同样的也会出现在如c/c++,JS,python语言中。

原因分析

其实,这并不是出Bug了,只是因为计算机无法100%准确地存储如0.1、0.2这样的小数,进而导致两个数进行加法运算返回的结果精度也可能会跟着出现问题。下面有更详细的分析:

1.首先了解十进制化二进制的原则:

(1)整数部分对2取余然后逆序排列。(2)小数部分乘2取整数部分,然后顺序排列。

2.先来尝试把十进制的0.1化成二进制得到:

0.1(十进制)= 0.0001100110011…0011…(二进制)
结果将不断循环0011这个片段,计算机将永远都存不下0.1的二进制小数,这就是问题所在了。像单精度浮点型数据用32位存储,双精度浮点型用64位存储,但是它们始终是有限位数,用来存储0.1将不可避免出现精度缺失的问题。只有当存储如1/2、1/4、1/8、3/4、5/8…这种形式的小数时才能准确。所以又推断0.2也会出现无限循环的情况,而结果也确实如此:
0.2(十进制)= 0.0011001100110011…0011…ÿ

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值