js中0.1+0.2为什么不等于0.3
最经典最高频的笔试面试题:
1、在JavaScript当中为什么0.1+0.2不等于0.3,而等于0.30000000000000004?
首先0.1这个十进制计算机是不会认的,它只会认二进制。 按照IEEE 754 双精度64位浮点数(/浮点型)的标准来转换二进制,这个标准是专门用在数字类型上的,这个标准的转法,有点复杂(可查阅IEEE 754标准相关资料)只需要知道它天然带来了一个bug,那就是精度丢失的问题。这也是为什么导致0.1+0.2不等于0.3根本的一个原因,越是小数这种误差就会越大。不仅是JavaScript采用了这个标准连Java和Python也是采用这种标准,之所以他们没有这个问题,是因为他们有很多相对的库。处理了这个棘手的问题。而JavaScript则是没有。JavaScript处理小数这种问题的方法:
1、如果是展示小数运算的结果,可以直接采用四舍五入。
例:praseFloat((0.1+0.2).toFixed(10))
2、如果想比较两个小数大小,就采用官方的建议:
两个小数相减的绝对值,然后再去比较ES6新提供的一个误差值,
如果小于这个误差值,则代表是有效的,
如果大于这个误差值,则是无效的
在JavaScript中浮点的运算从来都是不安全的,需要做额外的处理。
例:function Equal(a,b){
return Math.abs(a - b) < Number.EPSILON
}
console.log(Equal(.1+.2,.3)); //true
js中0.1+0.2为什么不等于0.3相关推荐
- vue main.js中引入js_手把手教你深入Vue3.0(Vue-cli4)项目打包性能优化实践
记录了自己的博客在禁用缓存的情况下,从八九秒加载时间到最终985ms的优化实践,开启缓存的情况下能达到138ms的访问速度 本人的个人博客采用的是Vue-cli4.1.2 + typescript构建 ...
- js中for(i in array)和for(i=0;i<array.length;i++)之间的坑
前情提要 刚刚接触到js写for循环的时候,觉得for(i in array)这种格式简直是非常直观,比三段论的for循环好写得多.直到遇到了一个坑,事情是这样的: 最开始的网页中,鉴于方便,清一色使 ...
- matlab中 cos(pi/2) sin(pi)不等于0怎么办
发现matlab中应该为零的 cos(pi/2). sin(pi)都为一个极小的值 查了半天,看到有人 关于MATLAB中cos(pi2)不等于0的问题_Azahaxia的博客-CSDN博客 但尝试 ...
- JS中捉摸不透的==(宽松等于)
首先来看一个有意思的面试题: if(a == 3 && a == 4){//... } 第一眼看到这个面试题我是拒绝的,这个等式根本不会成立,怎么会存在一个值既等于3并且还同时等于4呢 ...
- C语言中的空指针、空指针常量、NULL 0
C语言中的空指针.空指针常量.NULL & 0 本文转自: http://bbs.chinaunix.net/viewthread.php?tid=544415&extra=& ...
- 【问题思考总结】拉格朗日法的条件极值中的λ可以等于0吗(三种方法)
问题 在做这道题的时候,我在对变量消元的时候,直接放弃了λ=0的情况,原因很简单,这个λ=0不是就是无条件极值了嘛,怎么可能呢?然而经过查阅资料和思考发现,并不是这样.于是在前人的基础上通过比较无条件 ...
- JS中的数据类型转换
ES5中一共有6种数据类型,其中5种基本类型(String.Number.Boolean.Null.Undefined),1种引用类型(Object).基本类型值可以相互换转换,并且引用类型值也可以通 ...
- js中递归函数的经典案例
javascript中递归函数的经典案例 什么是递归函数? 关于递归的概念,我们都不陌生.简单的来说递归就是一个函数直接或间接地调用自身,是为直接或间接递归.一般来说,递归需要有边界条件.递归前进段和 ...
- 判断一个doule等于0的正确方法
doule进行数学运算时会出现精度问题,判断double是否等于0是不能用"d==0" 要用下面的方法: public static void main(String[] args ...
- JS中的null和undefined,undefined为啥用void 0代替?
起因 某天,在看某位同学的js代码,代码中发现了一个奇怪的东西 void 0,虽然第一眼看不懂这是什么东西,但是根据上下文,这里应该是想判断是否等于undefined,为什么要这样写的,有什么渊源 ...
最新文章
- 多分类可以分成多个独立的模型来训练
- Marketing Cloud里使用了哪个版本的UI5 Odata模型?
- 外观模式和代理模式的联系和区别_java23种设计模式-结构型模式之外观模式
- Druid Monitor监控JavaSE,杀cmd端口进程
- 项目管理-计划与实施,哪个更重要
- 2022电工杯:5G 网络环境下应急物资配送问题(优化)
- 【Fusion】Conic Quadratic Optimization
- FaceBoxes论文阅读
- 【汇正财经】什么是板块轮动?有什么规律?
- IE hasLayout详解
- 【c++面向过程实验6】函数
- 这么简单的抓包神器?15块钱?两块钱就搞定!
- airbnb机器学习模型_机器学习基础:预测Airbnb价格
- CATIA批量导入导出数据到EXCEL
- 计算机更新80072f76,更新win10系统出现错误代码0x80072f76如何解决
- CREO--螺杆限位槽
- 批量修改有那么简单吗?
- 2022年精密磨光棒行业市场下游应用规模前景预测及重点企业发展战略研究
- vb编写一个计算机配置选择程序,2016计算机二级《VB程序设计》练习题及答案
- 第四讲 send() recv()、sendto() recvfrom()、close() shutdown()、getpeername() gethostname()
热门文章
- 【源码之下无秘密】ArrayList:在内存只有10M的空间中申请一块5M的数组空间,会导致OOM吗?
- 阿里云香港服务器配置选择帮助文档(超详细)
- Power BI的基本操作
- PON串口链接详细步骤说明
- Zotero文献管理软件入门使用方法:软件下载、文献导入、引文插入
- 超立方体结构图计算机系统,科学网—超立方体或将构成纳米计算机
- Android ToolBar修改返回按钮图标
- Android Provision源码分析
- padbineditor.php,《智龙迷城》padBinEditor修改器教学
- 使用gmediarender-resurrect搭建DLNA音箱