解决js计算0.1+0.2 !==0.3

经常做用js数据运算的同学应该了解,在js中,0.1+0.2不会等于0.3,而是等于:

我一开始发现这个bug的时候也觉得很奇怪,那怎么去解决这个bug,让0.1+0.2 最后能得到0.3呢?

方法一
最简单的就是先把0.1和0.2换成别的数字(因为在js中只有这两个数相加有bug,例如:1.1+1.2不会有问题),所以先让0.1和0.2分别乘以10,求和之后再除以10 ,则不会有问题:

(0.1*10+0.2*10)/10 ===0.3

方法二
可能很多小伙伴都忘记了js的Number对象有一个保留小数位数的方法:toFixed();传入一个需要保留的位数就OK:

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

因为toFixed方法返回的是一个字符串,所以别忘了把字符串转回浮点数。

原文地址:https://www.cnblogs.com/plBlog/p/11656327.html

时间: 2025-01-17 17:45:28

解决js计算0.1+0.2 !==0.3的相关文章

js小数计算的问题,为什么0.1+0.2 != 0.3

//下面可以用原生解决 0.1+0.2 的问题 parseFloat((0.1 + 0.2).toFixed(10)) 复制代码 console.log(0.1+0.2===0.3); //true or false? 在正常的数学逻辑思维中,0.1+0.2=0.3这个逻辑是正确的,但是在JavaScript中0.1+0.2!==0.3,这是为什么呢?这个问题也会偶尔被用来当做面试题来考查面试者对JavaScript的数值的理解程度 在JavaScript中的二进制的浮点数0.1和0.2并不是十

JS魔法堂:彻底理解0.1 + 0.2 === 0.30000000000000004的背后

Brief 一天有个朋友问我“JS中计算0.7 * 180怎么会等于125.99999999998,坑也太多了吧!”那时我猜测是二进制表示数值时发生round-off error所导致,但并不清楚具体是如何导致,并且有什么方法去规避.于是用了3周时间静下心把这个问题搞懂,在学习的过程中还发现不仅0.7 * 180==125.99999999998,还有以下的坑 1. 著名的 0.1 + 0.2 === 0.30000000000000004 2. 1000000000000000128 ===

js常用工具库XCLJsTool v1.0发布

最近有空,整了一个js的工具库,还没有正式用于项目中,自己也没有时间写测试用例,想了一下,还是贴出来给大家看看,如果有问题,请留言,非常感谢!项目我放在了github上面,会经常更新的,过段时间会发布一版! /** * 欢迎使用本程序,您可以任意修改.复制.分享本程序所有代码,只需要保留本注释即可,谢谢! * 项目地址:<span style="color:#ff0000;">https://github.com/xucongli1989/XCLJsTool</spa

Excel计算百分比时分母为0的处理

作者:iamlaosong 实际工作中经常碰到百分比计算,但是,如果分母为0,则单元格显示#DIV/0!,可以用if函数进行判断(直接判断分母,或者用iserror(A1/B1)或isnumber(A1/B1)函数判断计算结果),这样就不会显示#DIV/0!,显示什么,可以根据需要设定,例如: =IF(B1<>0,A1/B1,0)     ' 分母为0时显示0 =IF(B1<>0,A1/B1,1)     ' 分母为0时显示1 =IF(B1<>0,A1/B1,"

如何解决JavaScript中0.1+0.2不等于0.3

console.log(0.1+0.2===0.3)// true or false?? 在正常的数学逻辑思维中,0.1+0.2=0.3这个逻辑是正确的,但是在JavaScript中0.1+0.2!==0.3,这是为什么呢?这个问题也会偶尔被用来当做面试题来考查面试者对 JavaScript的数值的理解程度. 在JavaScript中的二进制的浮点数0.1和0.2并不是十分精确,在他们相加的结果并非正好等于0.3,而是一个比较接近的数字 0.30000000000000004 ,所以条件判断结果

IIS6 2.0 4.0 冲突解决 &#39;c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\xxx&#39; -- &#39;Access is denied. &#39;

今天在阿里云虚拟机上部署新站点后出现下面的错误: Compiler Error Message: CS0016: Could not write to output file 'c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\xx' -- 'Access is denied. ' 找遍了网上的资料最后总结为以下几步:: Cleaned the "C:\Windows\Microsoft.NE

vs打开项目出错:未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA 5.0.props”的解决办法

有时候由于CUDA升级或者下载的源码原创建项目的CUDA版本与自己的不同,在打开项目的时候发现加载不上,提示:未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA 5.0.props” 解决办法: 找到项目中的.vcxproj文件,用记事本或别的打开,找到以下内容 <Import Project="$(VCTargetsPath)\BuildCustomizations\CUD

IIS6.0添加上.net4.0后,以前的.net系统出现“服务器应用程序不可用”的错误提示解决办法

把VS2010开发的网站.net4.0部署到Windows Server 2003的服务器上去, Windows Server 2003操作系统自带的为IIS 6.0,IIS 6.0一般只支持.NET 2.0的程序,这就需要配置服务器上的IIS 6.0达到支持.NET 4.0的目的.在网上查找了一些文章,以供大家查阅和参考,主要有以下几个步骤: 一.升级.net framework至4.0 如果服务器已经安装了VS2010,则其中已经包含安装了.net 4.0 framework,否则就需要另外

【js笔记】数组那些事[0]

js中数组是一个特殊的对象,索引是它的属性,整数索引在内部被转化为字符串类型. 1 数组的创建 new关键字方法:var arr=new Array() var arr=new Array(10); console.log(arr.length); //10 var arr=new Array(1,2,3); console.log(arr.length); //3 字面量方法:var arr=[] var arr=[]; console.log(arr.length); //0 var arr