告別浮點(diǎn)數(shù)噩夢!Dinero.js 讓前端貨幣計(jì)算穩(wěn)如泰山
為什么你需要 Dinero.js?
你是否遇到過這樣的 Bug?
0.1 + 0.2 === 0.3; // false ??
在金融、電商等涉及金額計(jì)算的場景,JavaScript 原生的 Number 類型會帶來浮點(diǎn)數(shù)精度丟失、貨幣單位混亂等問題。而 Dinero.js 就是為了解決這些痛點(diǎn)而生的專業(yè)貨幣計(jì)算庫!
Dinero.js 的核心優(yōu)勢:
- 精確計(jì)算:避免浮點(diǎn)數(shù)誤差
- 貨幣安全:支持多幣種、匯率轉(zhuǎn)換
- 格式化友好:輕松處理千分位、貨幣符號
- 不可變數(shù)據(jù):防止意外修改金額
Dinero.js 快速上手
安裝:
npm install dinero.js
基礎(chǔ)使用:
import { dinero, add, subtract, toUnit } from 'dinero.js';
import { USD } from '@dinero.js/currencies';
// 創(chuàng)建金額對象
const priceA = dinero({ amount: 1000, currency: USD }); // $10.00
const priceB = dinero({ amount: 500, currency: USD }); // $5.00
// 計(jì)算
const total = add(priceA, priceB); // $15.00
console.log(toUnit(total)); // 15
關(guān)鍵點(diǎn):
- amount 以最小貨幣單位存儲(如美元是美分,100 = $1.00)
- 不可變:所有操作返回新對象,避免副作用
Dinero.js 核心功能
(1) 精確計(jì)算
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) 多幣種 & 匯率轉(zhuǎn)換
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 其他方案
方案 | 優(yōu)點(diǎn) | 缺點(diǎn) |
Dinero.js | ? 精確計(jì)算、多幣種、格式化 | 需額外引入庫 |
BigNumber.js | ? 高精度計(jì)算 | ? 不專門處理貨幣 |
手動處理(×100) | ? 簡單 | ? 易出錯、維護(hù)難 |
結(jié)論:Dinero.js 是前端貨幣計(jì)算的最佳選擇!