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地址
在这里插入图片描述

总结

踩坑路漫漫长@~@

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【科普】气体检测仪使用时常见的几点误区,你占了几条?

气体检测仪的作用是检测环境中的气体浓度,及时发现并报警,以确保人员和设备的安全。气体检测仪在多个领域发挥着重要作用。 首先,它是对工业安全的重要保障。在生产现场,有毒、可燃或有爆炸性的气体泄漏可能导致严重的后果。气体检…

LabVIEW湍流等离子体束热效率优化

LabVIEW湍流等离子体束热效率优化 利用LabVIEW虚拟仪器技术,对湍流等离子体束的热效率进行了实时监测与优化,提高其在材料处理领域的应用效率和精度。通过双进气湍流等离子体发生器,实现了在不同工作参数下对热效率的实时在线监测&#xff0…

【Streamlit学习笔记】实现包含多个sheet的excel文件下载

1、什么是Streamlit Streamlit是一个免费的开源框架,用于快速构建和共享漂亮的机器学习和数据科学Web应用程序,官网链接 Streamlit Streamlit API链接 API reference 实际项目中遇到的问题:包含多个sheet的excel文件下载,下面将给…

【早鸟优惠|高录用|EI稳定检索】2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)诚邀投稿/参会!

【早鸟优惠|高录用|EI稳定检索】 2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)诚邀投稿/参会! # 早鸟优惠 # 先投稿先送审 # #投稿免费参会、口头汇报及海报展示# 2024年虚拟现实、图像和信号处理国际学术会议(I…

递推算法C++

所谓递推,是指从已知的初始条件出发,依据某种递推关系,逐次推出所要求的各中间结果及最后结果。其中初始条件或是问题本身已经给定,或是通过对问题的分析与化简后确定。从已知条件出发逐步推到问题结果,此种方法叫顺推…

【绘图案例-drawrect Objective-C语言】

一、接下来,我们来说drawrect:这个方法, 1.我们把之前的copy这个代码,复制粘贴一份,改个名字, 来个“05-drawrect”, 然后呢,关于这个drawrect: drawrect:啊,我们分几点来写, 1)首先:代码为什么要写在drawrect:当中, 2)rect参数的含义:也就是说,这个rect,…

Java毕业设计 基于springboot vue招聘网站 招聘系统

Java毕业设计 基于springboot vue招聘网站 招聘系统 springboot vue招聘网站 招聘系统 功能介绍 用户:登录 个人信息 简历信息 查看招聘信息 企业:登录 企业信息管理 发布招聘信息 职位招聘信息管理 简历信息管理 管理员:注册 登录 管理员…

第四百一十回

文章目录 1. 概念介绍2. 方法与细节2.1 获取方法2.2 使用细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取当前系统语言"相关的内容,本章回中将介绍如何获取时间戳.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章…

Windows Server 各版本搭建远程访问 / VPN 服务器实现 VPN 连接(03~19)

一、Windows Server 2003 开机后点击添加或删除角色 点击下一步 勾选自定义,点击下一步 点击 远程访问/VPN 服务器,点击下一步 点击下一步 点击下一步 勾选自定义,点击下一步 选择配置类型,点击下一步 点击完成 点击是 点击完成…

突破编程_前端_ACE编辑器(概述)

1 ACE 框架简介 ACE 框架是一个强大且灵活的前端文本编辑器框架,它提供了一套全面的 API 和丰富的功能,使得开发者能够轻松地在 Web 应用中集成功能强大的代码编辑器。ACE 编辑器不仅适用于在线代码编辑,还广泛应用于文档编辑、实时协作、富…

APP在应用商店该如何做好节日营销

38妇女节刚刚过去,不少商家吃上了一波节日红利。 你有没有注意到很多App在应用商店里改头换面,开展了很多以“三八节”为主题的营销活动,并且取得了不错的成绩。 可见季节性营销策划对产品的下载量和用户留存率还是很重要的。 那么我们如何…

2024年敏捷产品负责人CSPO认证培训

课程名称:Scrum Product Owner CSPO产品负责人认证 课程类型:经理级 课程简介: Scrum Product Owner产品负责人在Scrum产品开发当中扮演“舵手”的角色,他决定产品的愿景、路线图以及投资回报,他需要回答为什么做&am…

前端入职配置新电脑!!!

前端岗位入职第一天到底应该做些什么呢?又该怎样高效的认识、融入团队?并快速进入工作状态呢?这篇文章就来分享一下,希望对即将走向或初入前端职场的你,能够有所帮助。内含大量链接,欢迎点赞收藏&#xff0…

使用 Python 编写网络爬虫:从入门到实战

网络爬虫是一种自动化获取网页信息的程序,通常用于数据采集、信息监控等领域。Python 是一种广泛应用于网络爬虫开发的编程语言,具有丰富的库和框架来简化爬虫的编写和执行过程。本文将介绍如何使用 Python 编写网络爬虫,包括基本原理、常用库…

Python Learn day05

Python Learn day05 本文主要讲解 继承、多态、定制类 继承和多态 什么是继承 当新类想要拥有现有类的功能结构,可以使用继承。继承的前提是新类 is a 现有类,即: 子类 is 父类 总是从某个类继承: class Myclass(object):pass…

C++第七弹---类与对象(四)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、拷贝构造函数 1.1、概念 1.2、特征 2、运算符重载 2.1、等号运算符重载 总结 1、拷贝构造函数 1.1、概念 在现实生活中,可能…

外贸业务员如何说服老板拿到更低价

小伙伴问我说如何说服老板给到更好的价格,这个问题呢我在这里说一下我的观点 第一你需要去分析这个客户到底值不值得我们去给他花更多的一些心思,因为客户想要的这个价格既然已经突破了公司的价格标准了,说明他的价格要的非常的低&#xff0…

【C++】手撕AVL树

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:能直接手撕AVL树。 > 毒鸡汤:放弃自…

Qt Creator 安装 Beautifier

启动 Beautifier 插件。 在 qtCreator 界面上,Help - About Plugins - C - Beautifier 勾选此项。重启 qtcreator 下载 Artisitic Style 下载地址 解压后进入目录,进入 build/gcc/ 执行:make && make install 配置 Artisitic Style…

【Flask开发实战】防火墙配置文件解析(三)之python加工处理

一、前言 上一篇文章中,介绍了通过shell脚本读取配置文件获取到IP地址组、服务端口组、规则清单这三个模块类别基础数据。基础数据中还需要进一步进行展开处理,生成三类扩展表。如IP地址组中,同一个地址组下存在多个IP地址,每组I…