public
imalexnord
read
Slot
Calendar-first scheduling powered by Cloudflare Workers and Google Calendar.
Languages
Repository composition by tracked source files.
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
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);
}