当前位置: 首页 > java >正文

Decimal.js 的常用方法

Decimal.js是一个用于高精度计算的JavaScript库,特别适用于需要避免浮点数精度问题的场景,比如金融计算。

1. 安装与引入

# 通过 npm 安装
npm install decimal.js// 浏览器环境
<script src="decimal.js"></script>// Node.js 环境
const Decimal = require('decimal.js');


2. 基本用法

创建实例
const a = new Decimal(123.456);      // 从数字创建
const b = new Decimal('123.456');    // 从字符串创建(推荐,避免精度丢失)
const c = new Decimal('1.23e+5');    // 科学计数法

克隆对象

const d = new Decimal(a); // 浅拷贝
const e = a.clone();      // 深拷贝


3. 数学运算

四则运算
const x = new Decimal(10);
const y = new Decimal(3);x.plus(y);    // 加法 → 13
x.minus(y);   // 减法 → 7
x.times(y);   // 乘法 → 30
x.dividedBy(y); // 除法 → 3.333...

幂运算与取模

const a = new Decimal(5);
a.pow(3);     // 5³ → 125
a.mod(3);     // 5 % 3 → 2

链式操作

new Decimal(2).times(3).plus(5).dividedBy(2); // (2*3+5)/2 = 5.5


4. 精度控制

设置全局精度
Decimal.set({ precision: 20, rounding: 4 }); // 默认精度20位,四舍五入模式

单个实例精度

const a = new Decimal(1.2345);
a.toDecimalPlaces(2); // 保留两位小数 → 1.23
a.toSignificantDigits(3); // 保留三位有效数字 → 1.23

舍入模式

const modes = {0: Decimal.ROUND_UP,     // 向上取整1: Decimal.ROUND_DOWN,   // 向下取整2: Decimal.ROUND_CEIL,   // 向正无穷取整3: Decimal.ROUND_FLOOR,  // 向负无穷取整4: Decimal.ROUND_HALF_UP,// 四舍五入(默认)5: Decimal.ROUND_HALF_DOWN,6: Decimal.ROUND_HALF_CEIL,7: Decimal.ROUND_HALF_FLOOR,8: Decimal.ROUND_HALF_EVEN
};new Decimal(2.5).toDecimalPlaces(0, modes[4]); // → 3
 

5. 比较与判断

const a = new Decimal(10);
const b = new Decimal(10.00);a.equals(b);    // 严格相等 → true
a.equalTo(b);   // 允许精度差 → true
a.greaterThan(b); // 大于 → false
a.lessThan(b);  // 小于 → false


6. 格式化输出

const num = new Decimal(1234.5678);num.toFixed();          // "1235"(默认0位小数)
num.toFixed(2);         // "1234.57"
num.toFraction();       // 分数形式 → [12345678, 10000]
num.toExponential(3);   // 科学计数法 → "1.235e+3"
num.toLocaleString();   // 本地化格式 → "1,234.57"


7. 类型转换

const a = new Decimal(123.45);a.toNumber();    // 转换为浮点数 → 123.45
a.toString();    // 转换为字符串 → "123.45"
a.toJSON();      // 序列化为JSON → "123.45"


8. 高级功能

对数运算
const x = new Decimal(10);
x.ln();          // 自然对数 → 2.302585093...
x.log10();       // 常用对数 → 1
x.log(2);        // 以2为底的对数 → 3.321928095...

三角函数

const d = new Decimal(Math.PI / 4);
d.sin();         // sin(π/4) → 0.707106781...
d.cos();         // cos(π/4) → 0.707106781...
d.tan();         // tan(π/4) → 1
统计学函数
const arr = [1, 2, 3, 4, 5];
Decimal.mean(arr);    // 平均值 → 3
Decimal.sum(arr);     // 总和 → 15
Decimal.variance(arr); // 方差 → 2.5

适用场景

  • 金融计算(货币、利率、税费)
  • 科学计算(物理、化学公式)
  • 需要精确小数的任何场景
  • 避免浮点误差的累积
http://www.xdnf.cn/news/5626.html

相关文章:

  • HNUST软件测试B考前最终复习
  • 密码学--仿射密码
  • 配置文件介绍xml、json
  • (自用)Java学习-5.12(Redis,B2C电商)
  • 【A2A】根据A2A的协议标准,不同架构的2个大模型agent的交互,是否都需要实现和对接 client和server模块?
  • NuPlan v1.1 数据集校验
  • 网络原理(TCP协议性质)
  • ARM64内核内存空间布局
  • 0512 - 2094. 找出 3 位偶数
  • Spring Boot动态配置修改全攻略
  • Docker从0到1:入门指南
  • 基于卡尔曼滤波的传感器融合技术的多传感器融合技术(附战场环境模拟可视化代码及应用说明)
  • 量子加密通信:守护信息安全的未来之盾
  • 2025年第十六届蓝桥杯软件赛省赛C/C++大学A组个人解题
  • 51c大模型~合集127
  • 用C语言实现的——一个完整的AVL树的交互式系统
  • NHANES指标推荐:sNfL
  • 几何_平面方程表示_点+向量形式
  • linux内存管理
  • C盘扩容方法:如何扩展不相邻的分区?
  • 8天Python从入门到精通【itheima】-1~5
  • Baumer工业相机堡盟工业相机在使用光源时如何选择蓝光还是红光
  • 制作一款打飞机游戏43:行为编辑
  • dfs算法第二次加训之普及/提高- ,详解 上
  • GPT系列:自然语言处理的演进与多模态的探索
  • day012-软件包管理专题
  • ms-swift 代码推理数据集
  • iOS即时通信的技术要点
  • 扩展:React 项目执行 yarn eject 后的 package.json 变化详解及参数解析
  • 25、Tailwind:魔法速记术——React 19 样式新思路