当前位置: 首页 > wzjs >正文

网站制作公司 郑州新东方烹饪学校学费价目表

网站制作公司 郑州,新东方烹饪学校学费价目表,Wordpress如何修改URL,中国建筑网官网查询人员证书查在JavaScript开发中,浮点数精度问题是一个常见的陷阱。本文将深入探讨JavaScript中浮点数精度问题的原因、影响以及解决方案。 一、浮点数精度常见问题 (一)加法运算 console.log(0.1 0.2); // 0.30000000000000004 console.log(0.7 0.1…

在JavaScript开发中,浮点数精度问题是一个常见的陷阱。本文将深入探讨JavaScript中浮点数精度问题的原因、影响以及解决方案。

一、浮点数精度常见问题

(一)加法运算

console.log(0.1 + 0.2); // 0.30000000000000004
console.log(0.7 + 0.1); // 0.7999999999999999
console.log(0.2 + 0.4); // 0.6000000000000001
console.log(2.22 + 0.1); // 2.3200000000000003

(二)减法运算

console.log(1.5 - 1.2); // 0.30000000000000004
console.log(0.3 - 0.2); // 0.09999999999999998

(三)乘法运算

console.log(19.9 * 100); // 1989.9999999999998
console.log(19.9 * 10 * 10); // 1990
console.log(9.7 * 100); // 969.9999999999999
console.log(39.7 * 100); // 3970.0000000000005

(四)除法运算

console.log(0.3 / 0.1); // 2.9999999999999996
console.log(0.69 / 10); // 0.06899999999999999

(五)四舍五入保留小数位数

console.log((1.335).toFixed(2)); // 1.33

二、为什么会有这样的问题

(一)浮点数的存储方式

在JavaScript中,所有数字都以64位浮点数形式存储,即使整数也是如此。这种存储方式基于IEEE 754标准,其中64位的划分如下:

  • 符号位(1位):表示正负数,0表示正数,1表示负数。
  • 指数位(11位):表示次方数。
  • 尾数位(52位):存储小数部分,超出部分自动进一舍零。

(二)二进制表示的局限性

浮点数在计算机中以二进制形式存储,但某些十进制小数无法精确表示为二进制小数。例如,0.1和0.2在二进制中是无限循环小数,因此在存储时会被截断,导致精度丢失。

(三)JavaScript的Number类型

JavaScript中的Number类型统一按浮点数处理,整数也是按最大54位来计算的。因此,当数值超过安全范围(Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGER)时,就会出现精度问题。

三、解决方案

(一)使用第三方库

为了精确处理浮点数运算,可以使用一些成熟的第三方库,如Math.jsdecimal.jsbig.js

Math.js

Math.js是一个功能强大的数学库,支持多种数据类型和操作。

const math = require('mathjs');
console.log(math.add(0.1, 0.2)); // 0.3
decimal.js

decimal.js提供任意精度的十进制数值运算。

const Decimal = require('decimal.js');
console.log(new Decimal(0.1).plus(0.2).toNumber()); // 0.3
big.js

big.js专注于大数运算,支持高精度的浮点数运算。

const Big = require('big.js');
console.log(new Big(0.1).plus(0.2).toString()); // "0.3"

(二)自定义函数

如果不想引入第三方库,可以编写自定义函数来处理浮点数运算。以下是一个简单的加法函数示例:

function add(a, b) {const factor = 10 ** 10;return (Math.round(a * factor) + Math.round(b * factor)) / factor;
}
console.log(add(0.1, 0.2)); // 0.3

(三)避免浮点数运算

在某些情况下,可以避免直接使用浮点数运算。例如,处理货币时,可以将金额转换为整数(如分)进行计算,最后再转换回浮点数。

function addCents(a, b) {return (Math.round(a * 100) + Math.round(b * 100)) / 100;
}
console.log(addCents(0.1, 0.2)); // 0.3
http://www.dtcms.com/wzjs/514399.html

相关文章:

  • 淘宝客网站建设教程seo综合查询接口
  • 新乡网站建设设计5118关键词查询工具
  • 门户网站的主要特点手机系统流畅神器
  • 中国包装设计网seo排名工具
  • 网址导航网站制作工具优化排名工具
  • wordpress做定制T恤的网站网站优化推广平台
  • 北京工商登记服务平台乐山网站seo
  • 网站建设规划怎么写互联网销售包括哪些
  • 山东省建设发展研究院网站百度seo优化怎么做
  • 微软手机做网站服务器吗谷歌网站收录提交入口
  • 哪些做营销型网站做的好济南竞价托管公司
  • 百度景安空间网站seo搜索引擎优化期末及答案
  • 公司做网站app入什么科目快手刷粉网站推广
  • 买了虚拟主机怎么建设网站网站关键词优化排名
  • 南昌市网站建设推广人大常委会委员长
  • 集团企业网站建设文案打开百度一下网页版
  • 做网站的人 优帮云最近时事热点新闻评论及点评
  • 广元建设银行网站自己想开个网站怎么弄
  • 梧州网站平台建设公司百度大数据官网
  • 商贸有限公司怎么注销西安seo外包
  • 做网站安全维护是什么东东百度app登录
  • 门户网站模板源码下载观看b站的广告网站平台
  • 那些网站是做生鲜的seo关键词排名优化教程
  • 网站独立空间是什么意思数据网站
  • 哪个网站有适合小学生做的题目百度搜索关键词规则
  • 有哪些网站或者公司招募做视频的关键词查询网站的工具
  • 自己做网站要学什么软件下载网络营销策略ppt
  • 做cpa怎么建立自己网站广告联盟怎么加入
  • 伊利集团网站建设怎么样呢百度推广网页版
  • 福建建设厅官方网站扬州百度seo