Decimal.js

一、背景

我们都知道js是有精度问题的,如下图所示:

 在一些金额的计算时,对于精度要求的需要比较精准,所以这个时候,我们是需要特殊进行处理的,所以这个时候就引入了decimal.

二、decimal介绍

decimal.js是使用的二进制来计算的,所以可以更好地实现格化式数学运算,对数字进行高精度处理;使用decimal类型处理数据可以保证数据计算更为精确,还可以节省储存空间。

三、使用

1、npm命令引入decimal.js文件 

$ npm install --save decimal.js
/**  Node.js  */
var Decimal = require('decimal.js')
 
/** ES6 方式 */
import { Decimal } from 'decimal.js'

2.加减乘除

 const a = 9.99;
 const b = 8.03;

 // 加法
 let c = new Decimal(a).add(new Decimal(b)) 

 // 减法
 let d = new Decimal(a).sub(new Decimal(b))

 // 乘法
 let e = new Decimal(a).mul(new Decimal(b))
    
 // 除法
 let f = new Decimal(a).div(new Decimal(b))

注意:得到的是Decimal对象,需要转换为number类型哦

<think>根据用户的问题和提供的引用内容,用户需要了解decimal.js库的使用指南。我将结合引用内容,分步骤介绍decimal.js的安装、基本用法和实际应用。 首先,decimal.js是一个用于高精度十进制运算的JavaScript库,特别适合解决浮点数精度问题(如财务计算)[^1]。以下是指南的结构: 1. 安装decimal.js 2. 创建Decimal实例 3. 基本运算方法(加、减、乘、除等) 4. 其他实用方法(取模、幂运算、平方根等) 5. 格式化输出 6. 实际应用示例 7. TypeScript支持 ### 1. 安装decimal.js 通过npm安装(Node.js或前端构建工具): ```bash npm install --save decimal.js ``` 引用[3]提供了引入方式: ```javascript // Node.js const Decimal = require('decimal.js'); // ES6 import { Decimal } from 'decimal.js'; ``` ### 2. 创建Decimal实例 从数字或字符串创建: ```javascript const a = new Decimal(0.1); // 不推荐:浮点数本身不精确 const b = new Decimal('0.2'); // 推荐:字符串避免精度丢失 ``` ### 3. 基本运算方法 所有运算返回Decimal实例,需调用`.toNumber()`转为数字或`.toString()`转为字符串。 - **加法**:`add` 或 `plus` ```javascript const sum = new Decimal('0.1').add('0.2').toNumber(); // 0.3 ``` - **减法**:`sub` 或 `minus` ```javascript const diff = new Decimal('1.0').sub('0.7').toNumber(); // 0.3 ``` - **乘法**:`mul` 或 `times` ```javascript const product = new Decimal('1.01').mul('1.003').toNumber(); // 1.01303 ``` - **除法**:`div` 或 `dividedBy` ```javascript const quotient = new Decimal('0.029').div('10').toNumber(); // 0.0029 ``` ### 4. 其他实用方法 - **取模**:`mod` ```javascript const mod = new Decimal('10').mod(3).toNumber(); // 1 ``` - **幂运算**:`pow` ```javascript const power = new Decimal('2').pow(3).toNumber(); // 8 ``` - **平方根**:`sqrt` ```javascript const sqrt = new Decimal('2').sqrt().toNumber(); // ≈1.4142 ``` - **格式化输出**:`toFixed`(四舍五入) ```javascript const num = new Decimal('0.1546').toFixed(2); // "0.15" const num2 = new Decimal('0.1556').toFixed(2); // "0.16" ``` ### 5. 实际应用示例 **场景1:处理货币计算** ```javascript const price = new Decimal('9.99'); const tax = new Decimal('0.08'); const total = price.times(tax.add(1)).toFixed(2); // "10.79" ``` **场景2:计算复利收益** ```javascript const principal = new Decimal(1000); const rate = new Decimal('0.05'); // 年利率5% const years = 10; const finalAmount = principal.times(rate.add(1).pow(years)).toFixed(2); // "1628.89" ``` ### 6. TypeScript支持 引用[2][3]提到,decimal.js自带TypeScript声明文件,可直接在TypeScript中使用: ```typescript import { Decimal } from 'decimal.js'; const result: Decimal = new Decimal(1).add(2); ``` ### 总结 decimal.js通过链式调用提供精确计算,避免JavaScript浮点数误差。关键步骤: - 始终用**字符串**初始化Decimal以确保精度 - 运算后按需转换结果(`.toNumber()`/`.toString()`) - 财务计算优先使用`.toFixed()`格式化输出 §§相关问题§§ 1. decimal.js如何处理非常大或非常小的数字? 2. decimal.js与big.js有什么区别? 3. 在浏览器中直接使用decimal.js的步骤是什么? 4. decimal.js支持哪些舍入模式? </think> ### Decimal.js 使用指南 Decimal.js 是一个专为 JavaScript 设计的高精度十进制运算库,用于解决浮点数精度问题(如 `0.1 + 0.2 ≠ 0.3`)。以下是详细使用指南: --- #### **1. 安装与引入** **Node.js 环境** ```bash npm install decimal.js # 安装依赖 ``` ```javascript const Decimal = require('decimal.js'); // CommonJS 引入 // 或 import { Decimal } from 'decimal.js'; // ES6 引入 [^3] ``` **浏览器环境** ```html <script src="https://cdn.jsdelivr.net/npm/decimal.js@10.4.3/decimal.min.js"></script> ``` --- #### **2. 核心方法** 所有运算返回 `Decimal` 实例,需调用 `.toNumber()` 或 `.toString()` 获取结果值[^5]。 | **运算** | **方法** | **示例** | |----------|------------------|--------------------------------------------------------------------------| | 创建实例 | `new Decimal()` | `const a = new Decimal('0.1');` // 推荐字符串避免精度丢失 | | 加法 | `.add()` | `a.add(b).toNumber()` | | 减法 | `.sub()` | `new Decimal(1.0).sub(0.7).toNumber()` // 0.3(避免 `1.0-0.7=0.29999`)[^4] | | 乘法 | `.mul()` | `new Decimal(1.01).mul(1.003).toNumber()` | | 除法 | `.div()` | `new Decimal(0.029).div(10).toNumber()` | | 取模 | `.mod()` | `new Decimal(10).mod(3).toNumber()` // 1 | | 幂运算 | `.pow()` | `new Decimal(2).pow(3).toNumber()` // 8 | | 平方根 | `.sqrt()` | `new Decimal(2).sqrt().toNumber()` // ≈1.4142 | --- #### **3. 格式化与配置** - **保留小数位**(四舍五入): ```javascript new Decimal('0.1556').toFixed(2); // "0.16" [^5] ``` - **全局精度配置**: ```javascript Decimal.set({ precision: 10 }); // 设置全局计算精度为10位 ``` --- #### **4. 实际应用示例** **场景1:财务计算(避免浮点误差)** ```javascript const price = new Decimal('9.99'); const tax = new Decimal('0.08'); const total = price.mul(tax.add(1)).toFixed(2); // "10.79" ``` **场景2:复利计算** ```javascript const principal = new Decimal(1000); const rate = new Decimal('0.05'); // 年利率5% const finalAmount = principal.mul(rate.add(1).pow(10)).toFixed(2); // 10年后本息: "1628.89" ``` **场景3:科学计算** ```javascript const result = new Decimal(1).div(3).toFixed(20); // "0.33333333333333333333" ``` --- #### **5. 注意事项** - **初始化建议使用字符串**: `new Decimal(0.1)` 仍可能携带浮点误差,优先用 `new Decimal('0.1')`[^5]。 - **链式调用优化**: ```javascript // 推荐链式写法(减少实例创建) new Decimal('10').add('5').mul('2').toNumber(); // 30 ``` --- #### **6. 官方资源** - GitHub: [MikeMcl/decimal.js](https://github.com/MikeMcl/decimal.js) - API 文档: [decimal.js.org](http://mikemcl.github.io/decimal.js/) [^4] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值