为什么你需要 Dinero.js?
你是否遇到过这样的 Bug?
0.1 + 0.2 === 0.3; // false 🤯
在金融、电商等涉及金额计算的场景,JavaScript 原生的 Number 类型会带来浮点数精度丢失、货币单位混乱等问题。而 Dinero.js 就是为了解决这些痛点而生的专业货币计算库!
💡 Dinero.js 的核心优势:
- ✅ 精确计算:避免浮点数误差
- ✅ 货币安全:支持多币种、汇率转换
- ✅ 格式化友好:轻松处理千分位、货币符号
- ✅ 不可变数据:防止意外修改金额
Dinero.js 快速上手
1. 安装
npm install dinero.js
2. 基础使用
import { dinero, add, subtract, toUnit } from 'dinero.js';
import { USD } from '@dinero.js/currencies';
// 创建金额对象
const priceA = dinero({ amount: 1000, currency: USD }); // $10.00
const priceB = dinero({ amount: 500, currency: USD }); // $5.00
// 计算
const total = add(priceA, priceB); // $15.00
console.log(toUnit(total)); // 15
📌 关键点:
amount以最小货币单位存储(如美元是美分,100 = $1.00)- 不可变:所有操作返回新对象,避免副作用
Dinero.js 核心功能
1. 精确计算
import { multiply, divide } from 'dinero.js';
const salary = dinero({ amount: 10000, currency: USD }); // $100.00
const tax = multiply(salary, 0.1); // 10% 税 → $10.00
✅ 不再有 0.1 + 0.2 ≠ 0.3 的尴尬!
2. 多币种 & 汇率转换
import { convert, EUR } from '@dinero.js/currencies';
const usdAmount = dinero({ amount: 100, currency: USD }); // $1.00
const rates = { EUR: { amount: 90, scale: 2 } }; // 1 USD = 0.90 EUR
const eurAmount = convert(usdAmount, EUR, rates); // €0.90
🌍 支持全球货币,轻松做国际化!
3. 格式化输出
import { toFormat } from 'dinero.js';
const amount = dinero({ amount: 123456, currency: USD }); // $1234.56
const formatted = toFormat(amount, (value) => `$${value}`); // "$1,234.56"
💵 自动处理千分位、货币符号,告别手动拼接!
Dinero.js vs 其他方案
| 方案 | 优点 | 缺点 |
|---|---|---|
| Dinero.js | ✅ 精确计算、多币种、格式化 | 需额外引入库 |
| BigNumber.js | ✅ 高精度计算 | ❌ 不专门处理货币 |
| 手动处理(×100) | ✅ 简单 | ❌ 易出错、维护难 |
结论:Dinero.js 是前端货币计算的最佳选择!
📢 互动话题
你在项目中遇到过哪些货币计算的坑?欢迎留言讨论!👇
(点赞 + 转发,让更多开发者告别金额 Bug!)
关注我的微信公众号" 前端历险记",获取更多前端开发干货!