告别浮点数噩梦!Dinero.js 让前端货币计算稳如泰山

204 阅读1分钟

为什么你需要 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!)

关注我的微信公众号" 前端历险记",获取更多前端开发干货!