JS精度计算的几种解决方法,1、转换成整数计算后再转换成小数,2、toFixed,3、math.js,4、bignumber.js,5、big.js

提示:学习express,搭建管理系统

文章目录

  • 前言
  • 一、转换成整数计算后再转换成小数
  • 二、toFixed
  • 三、math.js
  • 四、bignumber.js
  • 五、big.js
  • 总结


前言

原始计算

 let aNum = 6.6 + 0.3;
 let bNum = 6.6 - 0.2;
 let cNum = 6.6 * 0.3;
 let dNum = 6.6 / 0.2;
 console.log(aNum,bNum,cNum,dNum,'normal');

一、转换成整数计算后再转换成小数

//乘以小数点后保留的位数的倍数
let multipleNum = 100;
 aNum = (Math.round(6.6*multipleNum + 0.3*multipleNum))/multipleNum;
 bNum = (Math.round(6.6*multipleNum - 0.2*multipleNum))/multipleNum;
 cNum = (Math.round(6.6 * 0.3 * multipleNum))/multipleNum;
 dNum = (Math.round((6.6 / 0.2) * multipleNum))/multipleNum;
 console.log(aNum,bNum,cNum,dNum,'multipleNum');

在这里插入图片描述

二、toFixed

Number.toFixed会返回String类型

//toFixed四舍五入保留几位小数  并且把number类型转成string类型
aNum = parseFloat((6.6+0.3).toFixed(2));
bNum = parseFloat((6.6-0.2).toFixed(2));
cNum = parseFloat((6.6*0.3).toFixed(2));
dNum = parseFloat((6.6/0.2).toFixed(2));
console.log(aNum,bNum,cNum,dNum,'toFixed');

在这里插入图片描述

三、math.js

npm install mathjs --save-dev
aNum =  math.add(math.bignumber(6.6), math.bignumber(0.3));
bNum =  math.subtract (math.bignumber(6.6), math.bignumber(0.2));
cNum =  math.multiply(math.bignumber(6.6), math.bignumber(0.3));
dNum =  math.divide(math.bignumber(6.6), math.bignumber(0.2));
console.log(aNum.toNumber(),bNum.toNumber(),cNum.toNumber(),dNum.toNumber(),'math bignumber toNumber');console.log(parseFloat(aNum.toString()),parseFloat(bNum.toString()),parseFloat(cNum.toString()),parseFloat(dNum.toString()),'math bignumber toString');console.log(parseFloat(math.format(aNum)),parseFloat(math.format(bNum)),parseFloat(math.format(cNum)),parseFloat(math.format(dNum)),'math bignumber format');

在这里插入图片描述

git地址
math.js官网
在这里插入图片描述

四、bignumber.js

npm install bignumber.js --save-dev
let num = new BigNumber(6.6);
aNum = num.plus(0.3);
bNum = num.minus(0.2);
cNum = num.multipliedBy(0.3);
dNum = num.dividedBy(0.2);
console.log(aNum.toNumber(),bNum.toNumber(),cNum.toNumber(),dNum.toNumber(),'bignumber.js toNumber');console.log(parseFloat(aNum.toString()),parseFloat(bNum.toString()),parseFloat(cNum.toString()),parseFloat(dNum.toString()),'bignumber.js toString');console.log(parseFloat(aNum.toFormat()),parseFloat(bNum.toFormat()),parseFloat(cNum.toFormat()),parseFloat(dNum.toFormat()),'bignumber.js toFormat');

在这里插入图片描述
git地址
在这里插入图片描述

五、big.js

npm install big.js --save-dev
let num0 = new Big(6.6);
aNum = num0.add(0.3);
bNum = num0.minus(0.2);
cNum = num0.times(0.3);
dNum = num0.div(0.2);
console.log(aNum.toNumber(),bNum.toNumber(),cNum.toNumber(),dNum.toNumber(),'big.js toNumber');console.log(parseFloat(aNum.toString()),parseFloat(bNum.toString()),parseFloat(cNum.toString()),parseFloat(dNum.toString()),'big.js toString');

在这里插入图片描述
git地址
在这里插入图片描述

总结

踩坑路漫漫长@~@

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

界面组件DevExpress WinForms v23.2 - 数据可视化功能升级

DevExpress WinForms拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜…

Android14 - AMS之Activity启动过程(3)

Android14 - AMS之Activity启动过程(1)-CSDN博客 Android14 - AMS之Activity启动过程(2)-CSDN博客 上篇中我们梳理完ActivityStarter的startActivityInner,本篇从这里开始: platform/frameworks/base/servi…

c++类和对象(三)

c类和对象(三) 再谈构造函数 Static成员 友元 内部 匿名对象 拷贝对象时的一些编译器优化 再次理解封装 1.再谈构造函数 1.1构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。…

YOLOv9有效改进|加入RT-DETR中的AIFI结构。

专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,助力高效涨点!!! 一、改进点介绍 AIFI是RT-DETR中使用的尺度内特征交互模块。 二、AIFI模块详解 2.1 模块简介 AIFI的主要思想: 与Transformer的Encoder类…

【leetcode热题】二叉搜索树迭代器

实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器: BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在…

【2024最新版,redis7】redis底层的10种数据结构

前言:本文redis版本:7.2.4 本文语雀原文地址(首发更新):https://www.yuque.com/wzzz/redis/xg2cp37kx1s4726y 本文CSDN转载地址: https://blog.csdn.net/u013625306/article/details/136842107 1. 常见的数…

【JavaScript】JavaScript 程序流程控制 ① ( 顺序流程控制 | 分支流程控制 )

文章目录 一、JavaScript 程序流程控制简介1、顺序流程控制2、分支流程控制3、分支流程控制 - 代码示例 一、JavaScript 程序流程控制简介 JavaScript 程序 执行过程中 , 不同的代码执行顺序 , 得到的结果是不同的 , 在编程中 经常 需要 根据 不同的条件 执行不同的代码块 , 或…

Redis数据结构对象中的对象共享、对象的空转时长

对象共享 概述 除了用于实现引用计数内存回收机制之外,对象的引用计数属性还带有对象共享的作用。 在Redis中,让多个键共享同一个值对象需要执行以下两个步骤: 1.将数据库键的值指针指向一个现有的值对象2.将被共享的值对象的引用计数增一 目前来说…

实验03-OSPF高级实验

1.实验拓扑 2.实验需求 3.配置思路 根据所给的IP地址配置完成后进行OSPF的配置: #R1 [r1]ospf 1 router-id 10.0.1.1 [r1-ospf-1]a 0 [r1-ospf-1-area-0.0.0.0]network 10.0.1.1 0.0.0.0 [r1-ospf-1-area-0.0.0.0]network 10.0.12.1 0.0.0.0 [r1-ospf-1-area-0.0.…

图书馆管理系统 1.架构项目以及加搭建项目

项目架构图 技术栈 后端 开发语言:java 开发环境:jdk11.0.12 开发工具:IntelliJ IDEA 2022.2.4 项目管理工具:maven 集成框架:springboot 权限控制框架:springSecurity 数据库:mysql 数据库框架…

QT-绘制动态曲线

QT-绘制动态曲线 pro文件中添加chart 在串口工程中添加控件 将控件功能提升为QChartView 点击添加 添加相关的头文件和变量

Selenium不同版本配置自动下载驱动及打包细节

Selenium配置浏览器驱动 自动下载浏览器驱动的方法 selenium4.7.0自动下载浏览器驱动的方法 selenium4.11.0 或4.11.1手动设置浏览器驱动路径的方法pyinstaller打包程序时同时打包ChromeDriverchromedriver路径需要sys._MEIPASS的路径进行引用方法一:通过–add-data…

【目标检测】图解 YOLOv3 的网络结构(Darknet-53 作为 backbone)

到了 YOLOv3,backbone 从 YOLOv2 的 Darknet-19 升级到了 Darknet-53。 下面一张完整的结构示意图来一起理解一下 YOLOv3 的网络结构。 我们怎么理解最后输出的 3 个特征图(feature map)的这个 255? 同 YOLOv2 一样,…

【蓝桥杯-单片机】基于定时器的倒计时程序设计

基于定时器的倒计时程序 题目如下所示: 实现过程中遇到的一些问题 01 如何改变Seg_Buf数组的值数码管总是一致地显示0 1 2 3 4 5 首先这个问题不是在main.c中关于数码管显示部分的逻辑错误,就是发生在数码管的底层错误。 检查了逻辑部分&#xff…

玩转C语言——深入理解指针

一、指针概念 1.1 内存和地址 在开始学习指针前,我们先来讲一个例子,假如你身处一栋楼中,你点了一份外卖,那么,外卖员如何能找到你?有两种方法。法一:直接一间一间找,这样做不仅消耗…

线程和进程的区别和联系

一、什么是进程 进程(Process), 是一个具有独立功能的程序关于某个数据集合的一次运行活动,是系统进行 【资源分配和调度】 的一个独立单位。 进程是【程序】的【一次执行】(是计算机中程序的执行过程,而不是计算机中的程序)进程是系统进行【资源分配和…

十二 超级数据查看器 讲解稿 详情7 其他功能

十二 超级数据查看器 讲解稿 详情7 其他功能 点击此处 以新页面 打开B站 播放当前教学视频 点击访问app下载页面 百度手机助手 下载地址 ​ 讲解稿全文: 其他操作,主要用来完成替换和批量修改, 这里,我们想给成语字段增…

YOLOv9改进策略:卷积魔改 | 分布移位卷积(DSConv),提高卷积层的内存效率和速度

💡💡💡本文改进内容: YOLOv9如何魔改卷积进一步提升检测精度?提出了一种卷积的变体,称为DSConv(分布偏移卷积),其可以容易地替换进标准神经网络体系结构并且实现较低的存…

二、Kubernetes(k8s)中部署项目wordpress(php博客项目,数据库mysql)

前期准备 1、关机顺序 2、开机顺序 (1)、k8s-ha1、k8s-ha2 (2)、master01、master02、master03 (3)、node01、node02 一、集群服务对外提供访问,需要通过Ingress代理发布域名 mast01上传 ingress-nginx.yaml node01、node02 上传 ingress-nginx.tar 、kube-webh…

【知识库系统】JWT实现前后端分离验证

本文会先从理论和实践两部分讲述如何去理解和实现通过JWT进行身份认证。 一、理论 1. SpringSecurity 默认的认证是需要通过 UsernamePasswordAuthenticationFilter 进行认证的,该过滤器认证前,会到 SecurityContextHolder 中寻找是否有符合的 Authent…