iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >为什么JS中0.1+0.2 != 0.3?
  • 227
分享到

为什么JS中0.1+0.2 != 0.3?

2023-06-03 13:06:13 227人浏览 八月长安
摘要

   js中数字运算时,有一个叫做 数字运算中的精度缺失的问题,这篇文章,就带着大家了解下JS运算中精度的缺失问题。  首先我们先来看一个例子:    这里0.1 + 0.2 != 0.3 这个就是我们要解决的问题了。  要弄清这

   js中数字运算时,有一个叫做 数字运算中的精度缺失的问题,这篇文章,就带着大家了解下JS运算中精度的缺失问题。

  首先我们先来看一个例子:

  

为什么JS中0.1+0.2 != 0.3?

  这里0.1 + 0.2 != 0.3 这个就是我们要解决的问题了。

  要弄清这个问题的原因,首先我们需要了解下在计算机中数字是如何存储和运算的。在计算机中,数字无论是定点数还是浮点数都是以多位二进制的方式进行存储的。

  在JS中数字采用的IEEE 754的双精度标准进行存储,我们可以无需知道他的存储形式,只需要简单的理解成就是存储一个数值所使用的二进制位数比较多而已,这样得到的数会更加精确。

  这里为了简单直观,我们使用定点数来说明问题。在定点数中,如果我们以8位二进制来存储数字。

  对于整数来说,十进制的35会被存储为: 00100011 其代表 2^5 + 2^1 + 2^0。

  对于纯小数来说,十进制的0.375会被存储为: 0.011 其代表 1/2^2 + 1/2^3 = 1/4 + 1/8 = 0.375

  而对于像0.1这样的数值用二进制表示你就会发现无法整除,最后算下来会是 0.000110011....由于存储空间有限,最后计算机会舍弃后面的数值,所以我们最后就只能得到一个近似值。

  在JS中采用的IEEE 754的双精度标准也是一样的道理,我们且不管这个标准下的存储方式跟定点数存储有何不同,单单在这一点上他们都是相同的,也就是存储空间有限,当出现这种无法整除的小数的时候就会取一个近似值,在js中如果这个近似值足够近似,那么js就会认为他就是那个值。

  比较拗口,举个例子:

  

为什么JS中0.1+0.2 != 0.3?

  所以我们现在应该可以理解,就是说由于0.1转换成二进制时是无限循环的,所以在计算机中0.1只能存储成一个近似值。另外说一句,除了那些能表示成 x/2^n 的数可以被精确表示以外,其余小数都是以近似值得方式存在的。

  在0.1 + 0.2这个式子中,0.1和0.2都是近似表示的,在他们相加的时候,两个近似值进行了计算,导致最后得到的值是0.30000000000000004,此时对于JS来说,其不够近似于0.3,于是就出现了0.1 + 0.2 != 0.3 这个现象。 当然,也并非所有的近似值相加都得不到正确的结果。

  有时两个近似值进行计算的时候,得到的值是在JS的近似范围内的,于是就可以得到正确答案。至于哪些值计算后能得到正确结果,哪些不能,我们也不需要去记。

  最好的方法就是我们想办法规避掉这类小数计算时的精度问题就好了,那么最常用的方法就是将浮点数转化成整数计算。因为整数都是可以精确表示的。

  方法也很简单,举个例子:

  

为什么JS中0.1+0.2 != 0.3?

  按照这个思路,写个简单的方法就好了。

Http://shenzhen.offcn.com/

--结束END--

本文标题: 为什么JS中0.1+0.2 != 0.3?

本文链接: https://www.lsjlt.com/news/234409.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 为什么JS中0.1+0.2 != 0.3?
       JS中数字运算时,有一个叫做 数字运算中的精度缺失的问题,这篇文章,就带着大家了解下JS运算中精度的缺失问题。  首先我们先来看一个例子:    这里0.1 + 0.2 != 0.3 这个就是我们要解决的问题了。  要弄清这...
    99+
    2023-06-03
  • JS中为什么有闭包
    本篇内容主要讲解“JS中为什么有闭包”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS中为什么有闭包”吧!太长不看版当「函数访问在其外部定义的变量时」,你需要闭...
    99+
    2024-04-02
  • js为什么那么难学
    这篇文章主要介绍了js为什么那么难学,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 1,怎么样去把具象的问题抽象化 就是面对一个很具体的...
    99+
    2024-04-02
  • JS 里为什么会有 this
    目录1、需求2、方案3、第一次改进4、加糖5、费解6、存在问题7、对象与函数1、需求 假设我们有一个对象 var person = { name: 'Frank', ...
    99+
    2024-04-02
  • 为什么JS是单线程的
    小编给大家分享一下为什么JS是单线程的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!为什么JS是单线程的?这主要与JS的用途有关...
    99+
    2024-04-02
  • 为什么前端js是指JavaScript
    本篇内容主要讲解“为什么前端js是指JavaScript”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“为什么前端js是指JavaScript”吧! ...
    99+
    2024-04-02
  • js为什么[]==![]是成立的吗
    目录前言== 与 === 的区别强制类型转换练习特殊情况undefined==null尾言前言 js是一门弱类型的语言,它的强制类型转换的迷惑性也被人诟病,例如标题提到的一个小例子,...
    99+
    2023-01-31
    js []==![]
  • js中为什么Proxy一定要配合Reflect使用
    目录引言前置知识单独使用 ProxyProxy 中的 receiverReflect 中的 receiver总结结尾引言 EcmaScript 2015 中引入了 Proxy 代理 ...
    99+
    2024-04-02
  • js中Promise是什么
    这篇文章主要为大家展示了“js中Promise是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js中Promise是什么”这篇文章吧。Promise是什么,...
    99+
    2024-04-02
  • js中什么是类
    小编给大家分享一下js中什么是类,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是类?类(class)是在 JS 中编写构造函...
    99+
    2024-04-02
  • js中Iterator是什么
    这篇文章将为大家详细讲解有关js中Iterator是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Iterator是什么,有什么作用?Iterator是理解第61条的...
    99+
    2024-04-02
  • 为什么不使用JS匿名函数
    这篇文章主要讲解了“为什么不使用JS匿名函数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么不使用JS匿名函数”吧!如果你不知道匿名函数是什么,这里有一...
    99+
    2024-04-02
  • 为什么JS会有原型的概念
    这篇文章主要介绍“为什么JS会有原型的概念”,在日常操作中,相信很多人在为什么JS会有原型的概念问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”为什么JS会有原型的概念”的疑惑...
    99+
    2024-04-02
  • js中的MVC是什么
    本篇内容主要讲解“js中的MVC是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“js中的MVC是什么”吧!MVC是什么?MVC是一种架构模式,它将应用抽象为...
    99+
    2024-04-02
  • js中constructor有什么用
    小编给大家分享一下js中constructor有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!constructorcon...
    99+
    2024-04-02
  • js中什么是同步
    本篇内容主要讲解“js中什么是同步”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“js中什么是同步”吧!如果调用者在函数返回时能够获得预期结果(即获得预期返回值或看到预期效果),则该函数同步。如果...
    99+
    2023-06-25
  • js中this有什么用
    这篇文章主要介绍了js中this有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。JavaScript是什么JS是JavaScript的简称,它是一种直译式的脚本语言,其...
    99+
    2023-06-14
  • js中Promise有什么用
    小编给大家分享一下js中Promise有什么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!promise可以处于等待被赋值的等待态(pending),可以给出值并转换为解决态(resolved)。一旦promise被一个...
    99+
    2023-06-25
  • js中instanceof有什么用
    这篇文章将为大家详细讲解有关js中instanceof有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。instanceofinstanceof 可以正确的判断对象的...
    99+
    2024-04-02
  • js中event.srcElement有什么用
    event.srcElement在JavaScript中是一个事件对象的属性,它指向触发事件的元素。它的主要用途是获取事件源元素的引...
    99+
    2023-08-09
    js
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作