NobGit
public imalexnord read

Slot

Calendar-first scheduling powered by Cloudflare Workers and Google Calendar.

Languages

Repository composition by tracked source files.

TypeScript
TypeScript 79% CSS 19% SQL 2% HTML 0%
Create file Wiki Documentation
Clone
https://nobgit.com/user/imalexnord/slot.git
ssh://[email protected]:2222/user/imalexnord/slot.git
money.ts
const ZERO_DECIMAL_CURRENCIES = new Set([
  'bif', 'clp', 'djf', 'gnf', 'jpy', 'kmf', 'krw', 'mga', 'pyg', 'rwf', 'ugx', 'vnd', 'vuv', 'xaf', 'xof', 'xpf',
]);

const THREE_DECIMAL_CURRENCIES = new Set(['bhd', 'jod', 'kwd', 'omr', 'tnd']);

export function currencyMinorUnitDigits(currency: string): number {
  const normalized = currency.trim().toLowerCase();
  if (ZERO_DECIMAL_CURRENCIES.has(normalized)) return 0;
  if (THREE_DECIMAL_CURRENCIES.has(normalized)) return 3;
  return 2;
}

export function majorToMinor(amountMajor: number, currency: string): number {
  if (!Number.isFinite(amountMajor) || amountMajor < 0) return 0;
  return Math.round(amountMajor * (10 ** currencyMinorUnitDigits(currency)));
}

export function minorToMajor(amountMinor: number, currency: string): number {
  if (!Number.isFinite(amountMinor)) return 0;
  return amountMinor / (10 ** currencyMinorUnitDigits(currency));
}

export function bookingAmountMinor(ratePerMinute: number, durationMinutes: number, currency: string): number {
  return majorToMinor(ratePerMinute * durationMinutes, currency);
}