关于javascript数字精度丢失的解决办法

news2024/9/24 19:13:46

分析原因

众所周知,在JavaScript中计算两个十进制数的和,有时候会出现令人惊讶的结果,主要原因是计算机将数据存储为二进制所引起的,所以这并不是javascript存在的缺陷,而在其他语言中也有类似的问题。

例如下面的例子:
我们在计算 0.1 + 0.1 的到的结果是 0.2,但是计算 0.1 + 0.2 的结果并不是0.3,而是0.30000000000000004
在这里插入图片描述
我们在计算 1.2 - 1 的结果并不是0.2,而是0.19999999999999996
不过这并不是JavaScript独有的,其他编程语言也会存在同样的问题。
在这里插入图片描述

解决办法:我们可以使用toPrecision凑整后再使用parentFloat,比如计算1.6385000000000001

let parse = parseFloat(1.6385000000000001.toPrecision(12))
console.log(parse === 1.6385) // true

接下来我们封装成方法使用

/**
	@param: 浮点小数
	@precise: 转换后有几位数
*/
function precision(num, precise) {
  return parseFloat(num.toPrecision(precise));
}

precision(1.6385000000000001, 1) // 2
precision(1.6385000000000001, 2) // 1.6
precision(1.6385000000000001, 3) // 1.64

其原理就相当一数学中的四舍五入。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1534094.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024-03-20 作业

作业要求: 1> 创建一个工人信息库,包含工号(主键)、姓名、年龄、薪资。 2> 添加三条工人信息(可以完整信息,也可以非完整信息) 3> 修改某一个工人的薪资(确定的一个&#x…

python毕业设计基于flask应急救援调度系统django

此系统设计主要采用的是python语言来进行开发,采用flask框架技术,框架分为三层,分别是控制层Controller,业务处理层Service,持久层dao,能够采用多层次管理开发,对于各个模块设计制作有一定的安全…

Git进阶命令-reset

一、reset命令使用场景 有时候我们提交了一些错误的或者不完善的代码,需要回退到之前的某个稳定的版本,面对这种情况有两种解决方法: 解决方法1:修改错误内容,再次commit一次 解决方法2:使用git reset 命令撤销这一次错误的com…

Cinema 4D 2024 for mac/Win:开启三维动画与建模新纪元

在数字化时代,三维动画与建模已成为影视、游戏、广告等多个领域不可或缺的创作工具。而Cinema 4D,作为这一领域的佼佼者,始终以其卓越的性能和创新的功能引领着行业的发展。如今,Cinema 4D 2024的发布,更是为我们带来了…

浅谈RPC的理解

浅谈RPC的理解 前言RPC体系Dubbo架构最后 前言 本文中部分知识涉及Dubbo,需要对Dubbo有一定的理解,且对源码有一定了解 如果不了解,可以参考学习我之前的文章: 浅谈Spring整合Dubbo源码(Service和Reference注解部分&am…

【极简无废话】open3d可视化torch、numpy点云

建议直接看文档,很多都代码老了,注意把代码版本调整到你使用的open3d的版本: https://www.open3d.org/docs/release/tutorial/visualization/visualization.html 请注意open3d应该已经不支持centos了! 从其他格式转换成open3d…

桌面日程安排软件,笔记本电脑常用软件有哪些?

在如今快节奏的社会环境中,时间仿佛成了比金子还要珍贵的资源。我们每个人都像是一名指挥官,需调度好每一刻光阴,使其发挥最大效益。而在这场与时间的较量中,一款优秀的桌面日程安排软件就像您的私人助理,帮您精准规划…

[BT]BUUCTF刷题第3天(3.21)

第3天(共3题) Web [极客大挑战 2019]LoveSQL Payload:/check.php?username1 union select 1,(select group_concat(password) from l0ve1ysq1),3%23&password1 看到登录页面,先尝试万能密码: 用户名&#xff…

51单片机学习9 串口通讯

51单片机学习9 串口通讯 一、串口通讯简介UARTSTC89C51RC/RD的串口资源 二、51单片机串口介绍1. 内部结构2. 寄存器(1)串口控制寄存器SCON(2)电源控制寄存器PCON 3. 计算波特率4. 串口配置步骤 三、 开发示例1. 硬件电路2. 代码实…

Jenkins流水线将制品发布到Nexus存储库

1、安装jenkins(建议别用docker安装,坑太多) docker run -d -p 8089:8080 -p 10241:50000 -v /var/jenkins_workspace:/var/jenkins_home -v /etc/localtime:/etc/localtime --name my_jenkins --userroot jenkins/jenkins:2.449 坑1 打开x…

第十九章 TypeScript 装饰器Decorator

Decorator 装饰器是一项实验性特性,在未来的版本中可能会发生改变 它们不仅增加了代码的可读性,清晰地表达了意图,而且提供一种方便的手段,增加或修改类的功能 若要启用实验性的装饰器特性,你必须在命令行或tsconfig…

动手做简易版俄罗斯方块

导读:让我们了解如何处理形状的旋转、行的消除以及游戏结束条件等控制因素。 目录 准备工作 游戏设计概述 构建游戏窗口 游戏方块设计 游戏板面设计 游戏控制与逻辑 行消除和计分 判断游戏结束 界面美化和增强体验 看看游戏效果 准备工作 在开始编码之前…

Riscure TrueCode静动态代码分析工具介绍

True Code是一个安全代码开发和自动漏洞识别的解决方案,适用于软件开发生命周期(SDLC)和DevSecOps流程。 True Code使用LibFuzzer作为模糊工具来模糊目标程序或软件。 True Code - Automated embedded Software Security checks 设备上运行…

高速CAN 收发器AMIS30660CANH2RG 用于各种数据传输协议的调制解调器和收发器

AMIS30660CANH2RG CAN 收发器是控制器区域网络 (CAN) 协议控制器和物理总线之间的接口,可在 12 V 和 24 V 系统中使用。该收发器为总线提供差分发射功能,向 CAN 控制器提供差分接收功能。由于接收器输入较宽的共模电压范围和其他设计功能, 能…

C 多维数组

C 语言支持多维数组。多维数组声明的一般形式如下: type name[size1][size2]...[sizeN];例如,下面的声明创建了一个三维 5 . 10 . 4 整型数组: int threedim[5][10][4];二维数组 多维数组最简单的形式是二维数组。一个二维数组&#xff0c…

从JVM的退出机制分析Java程序的优雅关闭退出

前言 Java程序启动从main函数开始启动,是程序入口和主线程,但程序会在什么时候结束?为什么有的Java程序在启动后很快就结束了,比如HelloWorld程序,有的程序却能一直在运行,比如Tomcat启动后就一直保持进程…

揭秘物联网网关,如何工作?功能及选择网关的主要考虑因素

【前言】本篇为物联网硬件系列学习笔记,分享学习,欢迎评论区交流~ 在物联网时代,物联网网关至关重要。它充当传统通信网络和传感网络之间的桥梁。物联网网关作为M2M网关,可以实现各类感知网络之间、感知网络与通信网络之间的协议转…

粤嵌6818开发板如何理解Linux文件IO?

一、文件IO的概述 1、什么是文件? Linux下一切皆文件。普通文件、目录文件、管道文件、套接字文件、链接文件、字符设备文件、块设备文件。 2、什么是IO? input output:输入输出 3、什么是文件IO? 对文件的输入输出,把…

MySQL索引的创建与基本用法

MySQL索引 MySQL索引是一种数据结构,用于提高查询数据的效率。MySQL索引可以被看作是数据库表的“目录”。就像书籍的目录帮助我们快速找到特定章节的位置一样,数据库索引帮助数据库快速找到特定数据记录的位置。 MySQL索引的类型与创建方法 MySQL索引…

TR1 - Transformer起源与发展

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 1. Transformer的起源与发展 2017年Google在《Attention Is All You Need》中提出了Transformer结构用于序列标注,在翻译任务…