Version v2.0.1 Size 3.9 KB gzip Dependencies Zero dependencies
Why Coins?
Coins keeps monetary values in bigint minor units, but makes units explicit at construction. Currency scale comes from deterministic definitions; Intl formats a known value without deciding its arithmetic representation.
ts
// Before
const total = (19.99 + 7.25) * 1.08;
// After
import { USD, add, money, multiply } from '@vielzeug/coins';
const total = multiply(add(money('19.99', USD), money('7.25', USD)), '1.08');| Feature | Coins | decimal.js | Dinero.js |
|---|---|---|---|
| Bundle size | 3.9 KB | External dependency | External dependency |
| Bigint minor units | |||
| Explicit currency scale | App-defined | Partial | |
| Exact allocation | Manual | ||
| Zero dependencies |
Use Coins when application values represent real money and every rounding boundary must be visible.
Consider native numbers when values are estimates, analytics, or display-only approximations.
Installation
sh
pnpm add @vielzeug/coinssh
npm install @vielzeug/coinssh
yarn add @vielzeug/coinsQuick Start
ts
import { USD, add, format, money, multiply } from '@vielzeug/coins';
const subtotal = add(money('12.50', USD), money('7.25', USD));
const total = multiply(subtotal, '1.08', { rounding: 'halfEven' });
console.log(format(total));Features
money: one constructor for decimal and explicit minor-unit valuescurrency: deterministic built-in currency definitionsadd: exact same-currency arithmeticallocate: split every minor unit without lossexchange: typed source and target currency conversionformat: locale presentation for bigint valuesparseMoneyJSON: validate persisted money values