解决JS浮点数运算结果不精确的问题

news/2024/7/23 11:27:14 标签: javascript, vue.js

文档:bignumber.js API

github:GitHub - MikeMcl/bignumber.js: A JavaScript library for arbitrary-precision decimal and non-decimal arithmetic

npm地址:bignumber.js - npm

 bignumber.js特性
整数和小数
简单的API,但功能齐全
比Java的BigDecimal的JavaScript版本更快,更小,更容易使用
缩小到8 KB
复制toExponential,toFixed,toPrecision和toStringJavaScript的数字类型的方法
包含toFraction和正确舍入的squareRoot方法
支持加密安全的伪随机数生成
没有依赖
广泛的平台兼容性:仅使用JavaScript 1.5(ECMAScript 3)功能
全面的文档和测试集


使用:

1、本地引入:

        <script src='path/to/bignumber.js'></script>

2、ES module 

  1. <script type="module">

  2. import BigNumber from './path/to/bignumber.mjs';

3、CDN

<script src='https://cdn.jsdelivr.net/npm/bignumber.js@9.0.2/bignumber.min.js'></script>

 

javascript">
// 计算传入的参数和,参数类型可以是 String,Number
// 两数之和
let x = BigNumber.sum('11', 23)
x.toNumber() // 34


// 多个参数
arr = [2, new BigNumber(14), '15.9999', 12]
let y = BigNumber.sum(...arr)
y.toString() // '43.9999'


// maximum,minimum
// 求最大值,简写 max,min
let x = [2222, 3333, '4444']
BigNumber.max(...x).toNumber() // 4444
BigNumber.min(...x).toNumber() // 2222
decimalPlaces(dp)


// 确定小数位数
let x = new BigNumber(1234.5678912345)
let y = new BigNumber(1234.56)
x.dp(2).toNumber() // 1234.56
y.dp(10).toNumber() // 1234.56


// plus
// 加法运算
0.1 + 0.2 // 0.30000000000000004
let x = new BigNumber(0.1)
x.plus(0.2).toNumber() // 0.3


// minus
// 减法运算
0.3 - 0.1 // 0.19999999999999998
let x = new BigNumber(0.3)
x.minus(0.1) // 0.2
multipliedBy(times)

// 乘法运算
0.6 * 3 // 1.7999999999999998
let x = new BigNumber(0.6)
x.times(3) // 1.8
dividedBy(div)

// 除法运算
let x = new BigNumber(300)
x.div(3).toNumber() // 100
x.div(7).dp(3).toNumber() // 42.857
dividedToIntegerBy(idiv)

// 除法运算,返回整数
let x = new BigNumber(5)
x.idiv(3).toNumber() // 1
x.idiv(0.7).toNumber() // 7
modulo(mod)

// 取余
1 % 0.9 // 0.09999999999999998
let x = new BigNumber(1)
x.mod(0.9).toNumber() // 0.1


http://www.niftyadmin.cn/n/253765.html

相关文章

经典文献阅读之--Orbeez-SLAM(单目稠密点云建图)

0. 简介 对于现在的VSLAM而言&#xff0c;现在越来越多的工作开始聚焦于如何将深度学习结合到VSLAM当中&#xff0c;而最近的这个工作就给出了一个比较合适的方法。《Orbeez-SLAM: A Real-time Monocular Visual SLAM with ORB Features and NeRF-realized Mapping》这篇文章&…

【SQL 必知必会】- 常用SQL语句速查

目录 ALTER TABLE COMMIT CREATE INDEX CREATE TABLE CREATE VIEW DELETE DROP INSERT INSERT SELECT ROLLBACK SELECT UPDATE ALTER TABLE ALTER TABLE 用来更新现存表的模式。可以用CREATE TABLE 来创建一个新表。详情可参见第17 课。 COMMIT COMMIT 用来将事务…

MES管理系统助力数字化转型,实现智能化制造

MES管理系统不仅可以优化制造流程&#xff0c;还可以整合企业资源&#xff0c;从而提高企业效益。MES管理系统具有数据实时采集、数据分析与决策支持等功能&#xff0c;有利于企业管理层及时掌握生产运营情况&#xff0c;进行战略决策。 对于工厂&#xff0c;MES管理系统…

西门子s7-300/400PLC-MMC密码解密

西门子s7-300/400-MMC密码解密 简介西门子加密工具及操作密码验证 简介 目前&#xff0c;市面上或网络上有很多针对s7-200&#xff0c;300&#xff0c;400&#xff0c;1200&#xff0c;1500的密码解密破解软件&#xff0c;但很多时候只能解数字或英文密码&#xff0c;对设置了…

day1-Django命令、目录结构

目录 1.基础命令 2.目录文件说明 3.路由系统 4.使用子应用 1.基础命令 查看所有子命令 python3 manage.py 创建项目 django-admin startproject 项目名 命令行启动项目 py manage.py runserver 端口号(可省略&#xff0c;使用默认端口) 创建子应用 py manage.…

数据可视化大屏——基于echarts的开发经验分享

文章目录 前言一、最简单的步骤概述二、最简单的demo三、工作流程3.1 与美工合作3.2 与后端合作3.3 前端具体在做什么 总结 前言 各位同事大家好&#xff01;下面是我使用echarts中总结的一些个人经验&#xff0c;仅供参考。 echarts的能力、优劣等特点大家应该在技术选型阶段…

Vue-列表过滤

列表过滤 对已知的列表进行数据过滤(根据输入框里面的内容进行数据过滤) 编写案例 通过案例来演示说明 效果就是这样的 输入框是模糊查询 想要实现功能&#xff0c;其实就两大步&#xff0c;1获取输入框内容 2根据输入内容进行数据过滤 绑定收集数据 我们可以使用v-model去…

中继器+js组件化GIS地图

虽然可以使用JavaScript注入的方式将GIS地图嵌入Axure&#xff0c;但每次使用地图都需要重复嵌入并修改代码&#xff0c;不太方便。那么&#xff0c;能不能实现组件化呢&#xff1f;我们可以使用中继器&#xff08;repeater&#xff09;将常用的地图参数提取出来&#xff0c;通…