关于javascript数字精度丢失的解决办法
分析原因
众所周知,在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
其原理就相当一数学中的四舍五入。
相关文章:
关于javascript数字精度丢失的解决办法
分析原因 众所周知,在JavaScript中计算两个十进制数的和,有时候会出现令人惊讶的结果,主要原因是计算机将数据存储为二进制所引起的,所以这并不是javascript存在的缺陷,而在其他语言中也有类似的问题。 例如下面的例子…...
每日一题 第二十一期 洛谷 组合的输出
组合的输出 题目描述 排列与组合是常用的数学方法,其中组合就是从 n n n 个元素中抽出 r r r 个元素(不分顺序且 r ≤ n r \le n r≤n),我们可以简单地将 n n n 个元素理解为自然数 1 , 2 , … , n 1,2,\dots,n 1,2,…,n&a…...
JavaScript 面试题
问题 1 // 请解释什么是 JavaScript 中的原型继承,以及原型链的概念答案 1 原型继承是 JavaScript 中实现继承的一种方式,每个对象都有一个指向另一个对象的引用,这个对象就是原型。当访问对象的属性或方法时,如果对象本身没有该…...
java输入语句scanner
在Java中,Scanner 类是 java.util 包中的一个类,它用于获取用户的输入。要使用 Scanner 类,你首先需要导入这个类,然后创建一个 Scanner 对象,通常命名为 scanner。你可以使用这个对象来读取用户从键盘输入的数据。 以…...
Python从入门到精通秘籍十一
一、Python之自定义模块并导入 在Python中,我们可以自定义模块并将其导入到其他Python程序中使用。自定义模块可以包含函数、类、常量等,便于组织和重用代码。 下面是使用Python代码详细讲解自定义模块的创建和导入的例子: 假设我们有两个…...
WRF模型教程(ububtu系统)-WPS(WRF Pre-Processing System)概述
一、WPS简介 WRF 预处理系统 (WRF Pre-Processing System,WPS) ,集成了基于Fortran和C编写的程序,这些程序主要用于处理输入到real.exe的数据。WPS主要有三个程序和一些辅助程序。 二、各程序介绍 主要的程序为geogrid.exe、ungrib.exe、met…...
C语言向C++过渡的基础知识(一)
目录 C关键字 C命名空间 命名空间的介绍 域作用限定符 命名空间的使用 C的输入以及输出 C中的缺省参数 缺省参数的介绍 缺省参数的使用 缺省参数的分类 全缺省参数 半缺省参数 C关键字 在C中,有63个关键字,而C语言只有32个关键字 asm do i…...
GEE遥感云大数据林业应用典型案例及GPT模型应用
近年来遥感技术得到了突飞猛进的发展,航天、航空、临近空间等多遥感平台不断增加,数据的空间、时间、光谱分辨率不断提高,数据量猛增,遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇…...
macOS Ventura 13.6.5 (22G621) Boot ISO 原版可引导镜像下载
macOS Ventura 13.6.5 (22G621) Boot ISO 原版可引导镜像下载 3 月 8 日凌晨,macOS Sonoma 14.4 发布,同时带来了 macOS Ventru 13.6.5 和 macOS Monterey 12.7.4 安全更新。 macOS Ventura 13.6 及更新版本,如无特殊说明皆为安全更新&…...
数据结构面试常见问题之Insert or Merge
😀前言 本文将讨论如何区分插入排序和归并排序两种排序算法。我们将通过判断序列的有序性来确定使用哪种算法进行排序。具体而言,我们将介绍判断插入排序和归并排序的方法,并讨论最小和最大的能区分两种算法的序列长度。 🏠个人主…...
perl 用 XML::LibXML 解析 Freeplane.mm文件,XML文件
Perl 官网 www.cpan.org 从 https://strawberryperl.com/ 下载网速太慢了 建议从 https://download.csdn.net/download/qq_36286161/87892419 下载 strawberry-perl-5.32.1.1-64bit.zip 约105MB 解压后安装.msi,装完后有520MB,建议安装在D:盘 在云计算…...
Spring Cloud Alibaba微服务从入门到进阶(七)(服务容错-Sentinel)
雪崩效应 我们把基础服务故障,导致上层服务故障,并且这个故障不断放大的过程,成为雪崩效应。 雪崩效应,往往是因为服务没有做好容错造成的。 微服务常见容错方案 仓壁模式 比如让controller有自己独立的线程池,线程池满…...
Arduino RP2040 + SSD1306 I2C OLED +LittleFS存储GBK字库实现中文显示
Arduino RP2040 + SSD1306 I2C OLED +LittleFS存储GBK字库实现中文显示 📌LittleFS插件安装,可以参考《Arduino RP2040 LittleFS的使用介绍》🎈相关内容《Arduino esp8266 软件I2C SSD1306 +LittleFS存储GBK字库实现中文显示》🔖基于Earle F. Philhower, III的核心固件开…...
代码随想录算法训练营第day53|1143.最长公共子序列 、 1035.不相交的线、 53. 最大子序和 动态规划
目录 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 1143.最长公共子序列 力扣题目链接(opens new window) 给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串:它是由原…...
【Flutter学习笔记】10.2 组合现有组件
参考资料: 《Flutter实战第二版》 10.2 组合现有组件 在Flutter中页面UI通常都是由一些低级别组件组合而成,当我们需要封装一些通用组件时,应该首先考虑是否可以通过组合其他组件来实现,如果可以,则应优先使用组合&…...
C++的vector类(一):vector类的常见操作
目录 前言 Vector类 遍历与初始化vector vector的扩容机制 vector的对象操作 find与insert 对象数组 前言 string类中还有一些内容需要注意: STL 的string类怎么啦? C面试中string类的一种正确写法 C STL string的Copy-On-Write技术 C的st…...
SpringBoot注解
Spring Boot 中常用的一些注解及其作用如下所示: SpringBootApplication:标注一个主程序类,用于启动 Spring Boot 应用,通常放在包的最顶层。 RestController:结合 Controller 和 ResponseBody,用于定义 R…...
每日三个JAVA经典面试题(十九)
1.Java Concurrency API 中的 Lock 接口(Lock interface)是什么?对比同步它有什么优势?Java并发API中的Lock接口提供了一种比传统synchronized块或方法更灵活、更强大的线程同步机制。Lock接口允许更细粒度的锁控制,通过它可以实现更复杂的线…...
springboot企业级抽奖项目业务一(登录模块)
开发流程 该业务基于rouyi生成好了mapper和service的代码,现在需要在controller层写接口 实际操作流程: 看接口文档一>controller里定义函数一>看给出的工具类一>补全controller里的函数一>运行测试 接口文档 在登录模块有登录和登出方…...
【Python + Django】启动简单的文本页面
前言: 为了应付(bushi)毕业论文,总要自己亲手搞一个像模像样的项目出来吧 ~ ~ 希望自己能在新的连载中学到项目搭建的知识,这也算是为自己的测试经历增添光彩吧!!! 希望、希望大家…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
