网站首页 > 博客文章 正文
前言
在讲解本篇文章的内容开始之前,我们先来掌握以下一些知识点。
Javascript中的数字都是双精度的浮点数。
Javascript中的整数并不是一个独立的数据类型,而是浮点数的一个子集。
Javascript
浮点数的坑
我们直接看下面的一个例子。
在浏览器的console控制台上我们分别进行以下的浮点数运算。
控制台的浮点数运算
通过控制台的运算,我们可以很惊奇的看到答案,有些运算结果竟然和我们想像的不一样,比如0.1+0.2的返回结果不是0.3,而是0.30000000000000004。
原因
首先要肯定的是这不是浏览器的问题,而是由于浮点数的精度导致的。
浮点数的精度问题并不是Javascript所独有的,例如在Java中,我们运行以下代码,同样会输出和Javascript中一样的结果。
Java中的双精度运算
那造成这个问题的原因是什么呢?
因为电脑永远都是按照二进制进行运算的,我们输入的十进制数在转化为二进制数时,并不总如人意,意思是说有些十进制并不能用准确的二进制数表示。
十进制小数转二进制表示
我们来看下十进制小数转二进制表示的过程,小数位乘以2,取整,小数部分继续乘以2,再取整,直到小数部分为0为止,然后将取整位按顺序排列。
由此方法我们可以看到以下一些十进制小数的二进制表示。
十进制与二进制
我们发现有些小数的二进制表示位数是无限循环的,这就造城了浮点数精度上的问题。
比如十进制的1.1,在用二进制表示时因为存在二进制位无限循环的表示,实际值为1.0999999999...无限接近于1.1
解决方法
遇到这种问题,常用的一种解决方法就是将浮点数转化为整数进行运算,以下是一些封装好的关于浮点运算的方法,而且经过测试,加减乘除运算都会达到自己想要的结果。
加法和减法运算
乘法和除法运算
总结
今天这篇文章讲的是Javascript中浮点数运算会产生的坑,你有遇到过吗?看了这篇文章会不会有很大的收获呢?
猜你喜欢
- 2025-03-18 Redis 浮点数累计实现(redis lfu 实现原理)
- 2025-03-18 「精品博文」FPGA定点小数计算(Verilog版)第四篇——定点小数转换为浮点小数
- 2025-03-18 6.4 数据类型转换(数据类型转化)
- 2025-03-18 借助温度传感器,通过PLC如何将浮点数在触摸屏中显示出来
- 2025-03-18 西门子SCL高级语言之数据转换介绍
- 2025-03-18 Unity Pro XL中Modbus通讯下来实现浮点数读取的精确转换方法!
- 2025-03-18 PLC编程基础浮点数的三角函数转换计算
- 2025-03-18 wincc怎么转换浮点数(互换)类型的数据
- 2025-03-18 PLC常识||浮点数是什么意思?它和实数不同?浮点数转换实例
你 发表评论:
欢迎- 374℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 369℃用AI Agent治理微服务的复杂性问题|QCon
- 360℃初次使用IntelliJ IDEA新建Maven项目
- 353℃Maven技术方案最全手册(mavena)
- 351℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 349℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 348℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 344℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)