告別浮點數噩夢!Dinero.js 讓前端貨幣計算穩如泰山
作者:天藍色的魚
在金融、電商等涉及金額計算的場景,JavaScript 原生的 Number 類型會帶來浮點數精度丟失、貨幣單位混亂等問題。而 Dinero.js 就是為了解決這些痛點而生的專業貨幣計算庫!
為什么你需要 Dinero.js?
你是否遇到過這樣的 Bug?
0.1 + 0.2 === 0.3; // false ??
在金融、電商等涉及金額計算的場景,JavaScript 原生的 Number 類型會帶來浮點數精度丟失、貨幣單位混亂等問題。而 Dinero.js 就是為了解決這些痛點而生的專業貨幣計算庫!
Dinero.js 的核心優勢:
- 精確計算:避免浮點數誤差
- 貨幣安全:支持多幣種、匯率轉換
- 格式化友好:輕松處理千分位、貨幣符號
- 不可變數據:防止意外修改金額
Dinero.js 快速上手
安裝:
npm install dinero.js
基礎使用:
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 是前端貨幣計算的最佳選擇!
責任編輯:趙寧寧
來源:
前端歷險記