为什么0.1 + 0.2 !== 0.3,如何让其相等?

简介: 为什么0.1+0.2不等于0.3呀?因为计算机是通过二进制的方式存储数据的,所以计算机计算0.1+0.2的时候,实际上是计算的两个数的二进制的和。0.1的二进制是0.0001100110011001100…(1100循环),0.2的二进制是:(1100循环),这两个数的二进制都是无限循环的数。那JavaScript是如何处理无限循环的二进制小数呢?

为什么0.1 + 0.2 !== 0.3?

let a = 0.1,b = 0.2
console.log(0.1 + 0.2); //0.30000000000000004

为什么0.1+0.2不等于0.3呀?


因为计算机是通过二进制的方式存储数据的,所以计算机计算0.1+0.2的时候,实际上是计算的两个数的二进制的和。0.1的二进制是0.0001100110011001100…(1100循环),0.2的二进制是:(1100循环),这两个数的二进制都是无限循环的数。那JavaScript是如何处理无限循环的二进制小数呢?


一般我们认为数字包含整数和小数,但在js中只有一种数字类型:Number,它的实现遵循IEEE 754标准,使用64位固定长度来表示,也就是标准的double双精度浮点数。在二进制科学表示法中,双精度浮点数的小数部分最多只能保留52位,再加上前面的1,其实就是保留53位有效数字,剩余的需要舍去,遵从“0舍1入”的原则。


根据这个原则,0.1和0.2的二进制数相加,再转化为十进制数就是:0.30000000000000004


解决办法

可以使用保留两位小数的方法

let a =0.1,b=0.2
console.log((a+b).toFixed(2) == 0.3);
相关文章
|
2月前
|
人工智能 编解码 安全
如何使用Sora?Sora小白教程一文通
如何使用Sora?Sora小白教程一文通。本文深入探讨了OpenAI于2024年发布的Sora——一款创新的文生视频大模型,详细介绍了其功能、技术原理、精准度、安全性以及对未来影响的全面分析
6723 5
|
开发工具 git
最好的 Git 动画教程,没有之一
介绍 Git 动画教程的学习方法。
最好的 Git 动画教程,没有之一
|
2月前
|
人工智能 前端开发 算法
自由编程学习资源:free-programming-books
`free-programming-books` 是一个GitHub上的开源项目,旨在收集和整理免费的编程学习资源,涵盖了各种编程语言、框架、工具和范畴。这个项目的目标是为广大的学习者提供高质量、免费且易于获取的学习资料,促进技术知识的传播和共享。
298 2
自由编程学习资源:free-programming-books
J3
|
存储 前端开发 JavaScript
个人开发的小破站,居然把掘金的文本编辑组件给搬上来了
个人开发的小破站,居然把掘金的文本编辑组件给搬上来了
J3
572 0
个人开发的小破站,居然把掘金的文本编辑组件给搬上来了
|
11月前
|
前端开发 JavaScript API
谈谈你对promise的理解?
Promise是ES6异步编程的一种解决方案(目前最先进的解决方案是async和await的搭配(ES8),但是它们是基于promise的),从语法上讲,Promise是一个对象或者说是构造函数,用来封装异步操作并可以获取其成功或失败的结果。
|
9月前
|
应用服务中间件 Linux nginx
【Nginx用法】Nginx停止服务和各种命令
【Nginx用法】Nginx停止服务和各种命令
440 0
|
Java
|
存储 资源调度 前端开发
深入解读ahooks
本文适合对打造工具函数库感兴趣的小伙伴阅读。
深入解读ahooks
|
JavaScript 前端开发 大数据
虚拟滚动是怎么做性能优化的?
虚拟滚动是怎么做性能优化的?
244 0
|
Linux 开发工具
Linux日志管理logrotate日志轮转
上篇文章学习了系统日志管理,对于日志来讲他是占内存的,当有大量的日志产生的时候,会有一天占满我们的内存,所以出现了日志轮转,轮转日志会删除时间久远的日志,来节省空间,这篇文章就是带大家了解学习日志轮转,通过本篇文章了解日志轮转的相关配置文件,学习怎么配置日志轮转,根据我们的需求进行配置,下面来进行学习吧。
244 0