告別浮點(diǎn)數(shù)噩夢(mèng)!Dinero.js 讓前端貨幣計(jì)算穩(wěn)如泰山
為什么你需要 Dinero.js?
你是否遇到過(guò)這樣的 Bug?
0.1 + 0.2 === 0.3; // false ??
在金融、電商等涉及金額計(jì)算的場(chǎng)景,JavaScript 原生的 Number 類(lèi)型會(huì)帶來(lái)浮點(diǎn)數(shù)精度丟失、貨幣單位混亂等問(wèn)題。而 Dinero.js 就是為了解決這些痛點(diǎn)而生的專(zhuān)業(yè)貨幣計(jì)算庫(kù)!
Dinero.js 的核心優(yōu)勢(shì):
- 精確計(jì)算:避免浮點(diǎn)數(shù)誤差
- 貨幣安全:支持多幣種、匯率轉(zhuǎn)換
- 格式化友好:輕松處理千分位、貨幣符號(hào)
- 不可變數(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)建金額對(duì)象
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 以最小貨幣單位存儲(chǔ)(如美元是美分,100 = $1.00)
- 不可變:所有操作返回新對(duì)象,避免副作用
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
支持全球貨幣,輕松做國(guó)際化!
(3) 格式化輸出
import { toFormat } from 'dinero.js';
const amount = dinero({ amount: 123456, currency: USD }); // $1234.56
const formatted = toFormat(amount, (value) => `$${value}`); // "$1,234.56"
自動(dòng)處理千分位、貨幣符號(hào),告別手動(dòng)拼接!
Dinero.js vs 其他方案
方案 | 優(yōu)點(diǎn) | 缺點(diǎn) |
Dinero.js | ? 精確計(jì)算、多幣種、格式化 | 需額外引入庫(kù) |
BigNumber.js | ? 高精度計(jì)算 | ? 不專(zhuān)門(mén)處理貨幣 |
手動(dòng)處理(×100) | ? 簡(jiǎn)單 | ? 易出錯(cuò)、維護(hù)難 |
結(jié)論:Dinero.js 是前端貨幣計(jì)算的最佳選擇!