0.1+0.2等于什么?为什么?【前端每日一题-8】

0.1+0.2等于什么?为什么?

考点:

  • 计算机浮点数运算规则
  • 平时遇到问题,有没有深入挖掘的精神

解答:

说实话,这个问题确实在平时开发中有遇到过,先上一个图。


是不是特懵逼,简直令人无法容忍。为什么会出现这样的结果?问题出在哪?如何解决?

为什么会出现这样的结果?问题出在哪?

JavaScript使用Number类型表示数字(整数和浮点数),遵循IEEE 754标准,通过64位来表示一个数字。

通过图片具体看一下数字在内存中的表示:


图片说明:

第0位:符号位,0表示整数,1表示负数

第1位到第11位:存储指数部分

第12位到第63位:存储小数部分(即有效数字)


首先,计算机无法直接对十进制的数字进行运算,这是硬件物理特性决定的。这样运算就分成了两个部分:先按照IEEE 754转成相应的二进制,然后对阶运算

而,0.1和0.2转换成二进制后会无限循环,但是由于IEEE 754尾数位数的限制,需要将后面多余的位截掉。这样在进制之间的转换过程中精度已经损失。

So,0.1+0.2 !=0.3

如何解决?

  1. 将数字转成整数,计算完成后再转小数(优势:小巧  劣势:对大数支持不好
  2. 三方库(1)Math.js:http://mathjs.org/(2)big.js:http://mikemcl.github.io/big.js


转载于:https://juejin.im/post/5d382c3351882559bc03ca3a

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值