首页 > 分享 > 为什么 0.1 + 0.2 != 0.3

为什么 0.1 + 0.2 != 0.3

最新推荐文章于 2023-03-03 09:10:00 发布

·段公子 于 2020-05-15 11:55:34 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

涉及面试题:为什么 0.1 + 0.2 != 0.3?如何解决这个问题?

先说原因,因为 JS 采用 IEEE 754 双精度版本(64位),并且只要采用 IEEE 754 的语言都有该问题。

我们都知道计算机是通过二进制来存储东西的,那么 0.1 在二进制中会表示为

// (0011) 表示循环 0.1 = 2^-4 * 1.10011(0011) 12

我们可以发现,0.1 在二进制中是无限循环的一些数字,其实不只是 0.1,其实很多十进制小数用二进制表示都是无限循环的。这样其实没什么问题,但是 JS 采用的浮点数标准却会裁剪掉我们的数字。

那么这些循环的数字被裁剪了,就会出现精度丢失的问题,也就造成了 0.1 不再是 0.1 了,而是变成了 0.100000000000000002

0.100000000000000002 === 0.1 // true

那么同样的,0.2 在二进制也是无限循环的,被裁剪后也失去了精度变成了 0.200000000000000002

0.200000000000000002 === 0.2 // true

所以这两者相加不等于 0.3 而是 0.300000000000000004

0.1 + 0.2 === 0.30000000000000004 // true

那么可能你又会有一个疑问,既然 0.1 不是 0.1,那为什么 console.log(0.1) 却是正确的呢?

因为在输入内容的时候,二进制被转换为了十进制,十进制又被转换为了字符串,在这个转换的过程中发生了取近似值的过程,所以打印出来的其实是一个近似值,你也可以通过以下代码来验证console.log(0.100000000000000002) // 0.1

那么说完了为什么,最后来说说怎么解决这个问题吧。其实解决的办法有很多,这里我们选用原生提供的方式来最简单的解决问题

parseFloat((0.1 + 0.2).toFixed(10)) === 0.3 // true

相关知识

js中的0.1+0.2!==0.3
Alrex(0.2%氯替泼诺滴眼液)和帕坦洛(0.1%盐酸奥洛他定)治疗季节性变应性结膜炎(SAC)的临床疗效和安全性的对比研究
几种主要果树叶面施肥技术
Python机器学习基础教程——1.7第一个应用:鸢尾花分类——学习笔记
花卉植物养护手册
果树最佳喷药方法
阳春三月果树花期喷药肥大有门道
果树花期施什么肥
花木秋季咋施肥用料呢?
生物股份600201股票的优劣势分析?生物股份600201为什么跌了这么多?投资前先了解清楚!

网址: 为什么 0.1 + 0.2 != 0.3 https://m.huajiangbk.com/newsview418197.html

所属分类:花卉
上一篇: 浅析园林植物配置在城市绿化中的应
下一篇: C++中关于a=a++的问题