教你一文解决 js 数字精度丢失问题

js中数字计算时丢失精度问题解决 在 JavaScript 中,浮点数运算时常会出现精度丢失问题,因为 JavaScript 使用 IEEE 754 双精度浮点数标准表示数字,这可能导致在进行数学运算时精度丢失。选择适合你需求的方法进行处理,可以帮助你避免在计算过程中出现的精度问题。方法可以将数字格式化为固定的小数位数,从而避免精度丢失。有时可以通过数学技巧来减少浮点数运算的误差,例如通过乘法和除法将所有运算转换为整数运算,最终再转换回浮点数。方法可以将浮点数转换为指定小数位数的字符串,避免了显示时的精度问题。 阅读详情

一、关于为什么要解决精度丢失

可以看下例子,因为js失去精度问题也是常见的问题,正常我们可以四舍五入或者 toFixed保留小数这种去解决
在这里插入图片描述
现在遇到问题是我们明知道计算结果是等于0.01的但是最后的结果确实true,如果我们遇到运算问题,小数数值比对问题,那么我们就必须要去解决他,否则也就会出现上者情况,出现逻辑判断出错问题

二、怎么解决js的计算精度丢失问题?

正常来说如果是 小数点保留后2位、3位等等,我们可以使用常见的 * 百位数、千位数 实现整位结果后 将结果在除以对应的数位实现结果,如下

console.log(5.22 - 5.21);

在这里插入图片描述

 console.log((5.22 * 100 - 5.21 * 100) / 100);

在这里插入图片描述

根据上方的描述我们再去着眼看我们最开始的例子
在这里插入图片描述
结果也就成了我们想要的结果

三、toPrecision 特定方法返回四舍五入长度字符串

当然toFixed也是可以实现对应的长度取舍效果的,因为各大浏览器针对toFixed的各类结果都是不同的有兴趣的同学可以参考下下面这篇文章
toFixed详解

在这里我们只介绍 toPrecision 参照方法详解
在这里插入图片描述

那么我们也就知道了此方法是用来干什么的
当然再有一点也就是从左到右 不为0的位置开始计算

上方举例 我们的结果是0.01

如果我们去使用toPrecision的话,那么要填写的参数则为1

在这里插入图片描述
返还的结果也就是我们想要的 0.01

然后我们搭配 parseFloat 对字符串进行一个浮点数值转换后,然后对比得出最后结果

console.log(5.22 - 5.21 < 0.01);
console.log((5.22 * 100 - 5.21 * 100) / 100 < 0.01);
var num = 5.22 - 5.21;
console.log(parseFloat(num.toPrecision(1)) < 0.01);

在这里插入图片描述

结语

✨ 每天创作一点点
✨ 开心快乐一整天
✨ 点赞关注加收藏
✨ 美好一天又一天

铁铁们 感谢支持 我需要你们的三连 👍👍👍
请添加图片描述

JS的浮点数计算精度丢失问题解决方案 近期在做项目的时候,遇到了一些JS浮点数精度的问题。这个问题,其实说大不大,说小不小。但是这次因为涉及到一些财务和结算的问题,然后突然发现这个小问题处理起来还是挺麻烦的。这里把相关的原因的问题的解决方案整理一下,也希望给各位提供一些参考。 阅读详情

相关推荐

解决JavaScript大数ID精度丢失问题

摘要:文章分析了JavaScript处理大数ID时的精度丢失问题,特别是在前后端分离系统中,雪花算法生成的19位Long类型ID超过JavaScript安全整数范围导致数据不一致。提出了使用Jackson的ToStringSerializer将Long类型ID序列化为字符串的解决方案,通过添加@JsonSerialize(using = ToStringSerializer.class)注解实现精确传输,避免前端精度丢失。该方案简单高效,无需修改前端代码,适用于各种分布式ID生成场景,有效解决了常见的大数I

qq_40603125的博客 1006

js运算精度丢失

js运算精度丢失问题(最终运算结果多了很多小数位)

ZWP_990527的博客 1万+

解决JavaScript数字精度丢失问题的方法

本文分为三个部分 JS 数字精度丢失的一些典型问题 JS 数字精度丢失的原因 解决方案(一个对象+一个函数) 一、JS数字精度丢失的一些典型问题 1. 两个简单的浮点数相加 0.1 + 0.2 != 0.3 // true 这真不是 Firebug 的问题,可以用alert试试 (哈哈开玩笑)。 看看Java的运算结果 再看看Python 2. 大整数运算 16位和17位数竟然相等,没天理啊。 又如 var x = 9007199254740992 x + 1 == x // ? 看结果 三观又被颠覆了。 3. toFixed 不会四舍五入(Chrome) 线上曾经

【JS】js运算过程中失去精度问题,解决方案

运算过程中失去精度,如何解决

Owen的博客 3641

HID报告描述符实战解析:从Usage到Item的完整设计流程

本文深入解析了HID报告描述符的设计流程,从核心概念Usage(用途定义)入手,详细阐述了如何通过Item(条目)的三种角色——全局、局部与主干,构建出能被系统正确识别的设备“说明书”。文章以标准USB鼠标和键盘为例进行实战拆解,并介绍了使用Report ID与自定义设备等进阶设计方法,帮助开发者掌握这一实现USB设备即插即用的关键技术。

weixin_29230865的博客 282

SqlSugar避坑指南:C#操作MySQL时你可能会忽略的5个细节

本文分享了使用C#和SqlSugar框架操作MySQL数据库时的实战避坑指南。针对连接配置、实体映射、查询性能、事务处理等关键环节,深入剖析了5个容易被忽略但至关重要的细节,帮助开发者提升项目稳定性和执行效率,避免常见陷阱。

delta的博客 276

js小数运算出现的问题(精度丢失)及解决办法

以下是在项目中遇到的问题 购物车结算时,商品价格(33.01)-优惠券价格(5),本应该是28.01,但是实际的结果是28.009999999999998 之前真没遇到过这种问题,查了很多资料才了解到js 小数相加减是会出现精度丢失的问题 案例 本案例是在浏览器控制台里打印 出现这种问题的原因,查看详细原因(链接) 原因其实就是js number类型运算都需要先将十进制转二进制 但小数点后的位数转二进制会出现无限循环的问题,只能舍0入1,所以会出现小数点丢失问题,感兴趣的可以自己研究,链接在上面。 解决

kukulei2211的博客 3万+

【Claude】媒体文件处理错误:PDF 与 Image 过大的检测与预处理方法 bug报错已解决

图片压缩是必须的:原始图片的 base64 会占用大量 TokenPDF 提取文本优于传图片:文本版 PDF 比扫描版更省 Token分块处理大文件:不要一次性处理整个大文件控制分辨率:800x800 通常足够 Claude 分析。

博客 6360

说说 Javascript 数字精度丢失的问题,如何解决?

这个数无限循环,再大的内存它也存不下,所以不能存储一个相对于数学来说的值,只能存储一个近似值,当计算机存储后再取出时就会出现精度丢失问题。主要是存储二进制时小数点的偏移量最大为52位,最多可以表达的位数是2^53=9007199254740992,对应科学计数尾数是 9.007199254740992,这也是 JS 最多能表示的精度。计算机存储双精度浮点数需要先把十进制数转换为二进制的科学记数法的形式,然后计算机以自己的规则{符号位+(指数位+指数偏移量的二进制)+小数部分}存储二进制的科学记数法。

林恒的博客 1425

3步!Spring Boot+OCR引擎秒提身份证/营业执照?手把手教你从零实现!

OCR技术革新文档识别效率 本文演示了如何利用Spring Boot+Tesseract OCR+OpenCV构建自动化文档识别系统。相比传统人工录入,OCR技术可实现: 5秒极速提取身份证/营业执照关键信息 精准识别中文文本(准确率90%+) 正则过滤自动匹配结构化数据 技术要点: OpenCV图像预处理(灰度化+二值化) Tesseract多语言OCR识别 正则表达式精准提取证件号码 效率提升达100倍,错误率降低90%,适用于金融、政务等需要批量处理证件的场景。

java专栏 905

【Docker】常见容器问题解决#OCI runtime create failed: container_linux.go:349: starting container process

ERROR: for nginx Cannot start service nginx: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \\\"/data/docker-compose/n

liu_chen_yang的博客 5528

【温故而知新】JavaScript数字精度丢失问题

在JavaScript中,由于基于IEEE 754标准的浮点数表示方法,导致在进行数字运算时可能会发生精度丢失的情况。由于计算机内部使用二进制来表示浮点数,而无法准确地用有限的二进制位数表示所有的实数。因此,浮点数在存储和计算时会存在舍入误差。比如,当进行小数运算时可能会出现精度丢失的情况。例如,0.1 + 0.2 的结果在JavaScript中不是期望的0.3,而是一个近似值0.30000000000000004。这是因为0.1和0.2在二进制表示中无法被精确表示,导致在计算时发生了舍入误差。

日常笔记/总结/系列知识梳理 1668

C语言使用开源库libusb进行USB设备操作

https://libusb.info/libusb is a C library that provides generic access to USB devices. It is intended to be used by developers to facilitate the production of applications that communicate with USB hardware. It is portable: Using a single cross-platform AP

m0_60352504的博客 1554

几种解决JS数字精度丢失的方法

在JavaScript中计算两个十进制数的和,有时候会出现令人惊讶的结果,相信这个大家也都知道了! 精度丢失 例如,我们在计算0.1 + 0.1得到的结果是0.2,但是计算0.1 + 0.2的结果并不是0.3,而是0.30000000000000004 这种现象不仅出现在加法,在减法中也会出现类似的结果。 例如1.2 - 1的结果是0.19999999999999996 不过这并不是JavaScript独有的,其他编程语言也会存在同样的问题。 例如在Python环境下输出。 print(.1 + .2)

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 6769

SAP ABAP Cloud 发展简史

其中用于云开发的 ABAP,官方术语是 「ABAP in the Cloud」,本文后续叙述方便起见,简称为 「ABAP Cloud」. 它涵盖了标准 ABAP 语言范围的一个子集,只能访问受限的 API,用于构建 SAP BTP ABAP 环境以及 SAP S/4HANA Cloud ABAP 环境上的云解决方案。SAP ABAP 平台是用于 SAP ECC、SAP S/4HANA 和 SAP BTP 等产品的技术平台,也是 ABAP 应用程序的开发和运行环境。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1393

Week 9 10 Neural Networks

Week 9 10 Neural Networks

金州饿霸吃不饱的博客 404

【javascript】数据精度丢失问题

JavaScript中存在小数点精度丢失的问题是由于其使用的浮点数表示方式。JavaScript采用的是双精度浮点数表示法,也称为IEEE 754标准,它使用64位来表示一个数字,其中52位用于表示有效数字,而其他位用于表示符号、指数和特殊情况。由于使用有限的位数来表示无限的小数,JavaScript无法准确地表示某些小数。其中一个典型的示例是0.1,它在二进制中是一个无限循环的小数。当我们将0.1这样的小数转换为二进制进行存储时,存在近似表示的误差,因此在进行计算时会出现精度丢失的问题。

weixin_45274678的博客 1636

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

JavaScript数字精度丢失问题总结

本文分为三个部分: 1、JS 数字精度丢失的一些典型问题(前端遇小数计算概率大,要有这个精度丢失的意识) 2、JS 数字精度丢失的原因(计算机用二进制存储数据,由于存储位置的限制有时会存在“舍去”。当模仿十进制进行四舍五入时,0舍1入,造成误差) 3、解决方案(一个对象+一个函数)(解决...

chenkan0603802的博客 1141

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

js number 丢失精度_JavaScript精度丢失问题

JavaScript精度丢失问题。 javaScript中臭名昭著的BUG就是0.1+0.2 !== 0.3,因为精度问题,导致所有浮点数运算都是不安全的。正如下面的计算结果,它们并不是我们所预想的:0.1 + 0.2 = 0.300000000000000041 - 0.9 = 0.09999999999999998虽然很多人知道这个浮点数误差这个问题的,可是却不知道背后的原理以及解决...

weixin_42545636的博客 7027

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JavaScript 数字精度丢失的问题及解决方案

JavaScript 数字精度丢失的问题及解决方案

huihui_999的博客 3738

JavaScript数据精度丢失的底层原理及解决方案

IEEE 754标准是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。它定义了表示浮点数的格式(包括负零、-0、无穷大(Inf)和非数值(NaN))、特殊数值,以及这些数值的运算规则。IEEE 754规定了四种表示浮点数值的方式:单精确度(32位)、双精确度(64位)、延伸单精确度(43比特以上,较少使用)和延伸双精确度(79比特以上,通常以80位实现)。其中,双精确度是JavaScript中数字的主要表示方式。

u014676858的博客 1301

JavaScript数字精度丢失问题解决方案

在使用javascript进行运算时经常会遇到计算结果不准确问题,该如何处理呢,本篇就来说说当javascript数字精度丢失时我们该怎么办

Sherry Tian的博客 810

JavaScript 金额运算精度丢失问题及解决方案

在 JavaScript 中,浮点数运算可能会产生精度丢失的问题,尤其在处理金额计算时,这可能会导致严重的业务逻辑错误。// false这些问题主要是由于JavaScript 使用 IEEE 754 双精度浮点数(64 位)来表示数字,某些小数无法用二进制精确表示,从而导致精度丢失。本篇文章将深入剖析 JavaScript金额计算精度丢失的原因,并提供多种解决方案来避免这些问题。JavaScript 的浮点运算容易导致金额计算误差,我们可以通过整数运算、、BigDecimal 库等方式来解决。

学习编程的小羊的博客 912
上一篇: React造轮子(reacthook实现一套自己的组件库)轮子公开课——第六课【Checkbox、CheckboxGroup】组件
下一篇: vue Template模板中针对属性如何写空白字符串占位符?(\u00a0)会是一个好的空格占位解决方案
归来巨星
归来巨星 新星创作者: 前端开发技术领域 新星创作者: 前端开发技术领域
博客等级 码龄7年 5391粉丝 95原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

归来巨星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值