网站首页 > 基础教程 正文
前言
在讲解本篇文章的内容开始之前,我们先来掌握以下一些知识点。
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中浮点数运算会产生的坑,你有遇到过吗?看了这篇文章会不会有很大的收获呢?
猜你喜欢
- 2024-11-05 javascript的科普基础二 javascript的介绍
- 2024-11-05 JavaScript-第二章 javascriptj
- 2024-11-05 Javascript一些实用技巧 javascript循环技巧
- 2024-11-05 第31节 类型和对象-Javascript-零点程序员-王唯
- 2024-11-05 Js复习小结 js总结
- 2024-11-05 「收藏」JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
- 2024-11-05 JavaScript Promise 详解 js中promise的使用与理解
- 2024-11-05 web前端:原生js全动画企业官网,开机动画、切屏/分屏动画
- 2024-11-05 SpreadJS教程:如何在填报场景中使用数据绑定获取数据源
- 2024-11-05 纯JavaScript实现的MQTT智能门锁 智能门锁近三年的市场数据采集
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- 单例 (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)