实用封装函数
以下封装函数基于 decimal.js,适用于常见的高精度计算场景,方便快速调用。
1. 安全转换为 Decimal
确保输入被安全转换为 Decimal 实例,避免异常。
import Decimal from 'decimal.js';
export function toDecimal(value) {
try {
if (value instanceof Decimal) {
return value;
}
if (value === null || value === undefined || value === '') {
return new Decimal(0);
}
return new Decimal(value);
} catch (e) {
console.warn('Invalid decimal input:', value);
return new Decimal(0);
}
}
`
2. 精确加法
export function add(a, b) {
return toDecimal(a).plus(toDecimal(b));
}
3. 精确减法
export function subtract(a, b) {
return toDecimal(a).minus(toDecimal(b));
}
4. 精确乘法
export function multiply(a, b) {
return toDecimal(a).times(toDecimal(b));
}
5. 精确除法
export function divide(a, b) {
const divisor = toDecimal(b);
if (divisor.isZero()) {
throw new Error('Division by zero');
}
return toDecimal(a).div(divisor);
}
6. 格式化为指定小数位字符串
支持舍入模式,默认四舍五入。
export function formatDecimal(value, decimalPlaces = 2, roundingMode = Decimal.ROUND_HALF_UP) {
return toDecimal(value).toDecimalPlaces(decimalPlaces, roundingMode).toFixed(decimalPlaces);
}
7. 判断数值是否为正数(含零)
export function isPositive(value) {
return toDecimal(value).isPositive() || toDecimal(value).isZero();
}
8. 判断数值是否为负数
export function isNegative(value) {
return toDecimal(value).isNegative();
}
9. 链式调用示例
export function calcExample(a, b, c) {
return toDecimal(a)
.plus(b)
.times(c)
.toDecimalPlaces(4, Decimal.ROUND_HALF_UP);
}
以上封装函数适合日常开发中快速处理高精度数字,便于维护和扩展。
根据业务需求可进一步丰富和定制功能。
相关内容
- 为什么需要 decimal.js JavaScript 原生数字类型存在浮点精度问题,导致金融、科学计算等场景出现误差。decimal.js 提供高精度的小数计算支持,解决原生数值缺陷,适合复杂...
- JS 浮点数精度问题示例 介绍 JavaScript 原生浮点数的精度问题,展示常见的计算误差示例及其影响,并引出高精度计算库 decimal.js 作为解决方案。
- decimal.js 的优势 介绍 decimal.js 库在高精度计算中的优势,包括任意精度支持、丰富的运算功能、多种舍入模式和易用的 API 设计。
- 安装方式 介绍如何在不同环境下安装和引入 decimal.js,包括 npm、yarn 和浏览器 CDN,助你快速集成高精度计算功能。
- 基本使用示例 通过简单示例介绍 decimal.js 的基本用法,包括创建实例和进行常见的加减乘除运算。
- decimal.js 与原生 Number 的对比 通过示例对比 decimal.js 和 JavaScript 原生 Number 类型在数值精度和计算准确性方面的差异,说明 decimal.js 的优势。