42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
export function parseRupiah(value: string | number): string {
|
|
const str = String(value);
|
|
const isNegative = str.startsWith('-') || (typeof value === 'number' && value < 0);
|
|
|
|
return isNegative ? '-' + str.replace(/[^0-9]/g, '') : str.replace(/[^0-9]/g, '');
|
|
}
|
|
|
|
export function formatRupiah(value: string | number): string {
|
|
const digits = parseRupiah(value);
|
|
|
|
if (!digits) {
|
|
return '';
|
|
}
|
|
|
|
return Number(digits).toLocaleString('id-ID');
|
|
}
|
|
|
|
export function formatRupiahShort(value: number): string {
|
|
const abs = Math.abs(value);
|
|
const sign = value < 0 ? '-' : '';
|
|
|
|
if (abs >= 1_000_000_000) {
|
|
const v = abs / 1_000_000_000;
|
|
|
|
return sign + (v % 1 === 0 ? v.toFixed(0) : v.toFixed(1).replace('.', ',')) + 'M';
|
|
}
|
|
|
|
if (abs >= 1_000_000) {
|
|
const v = abs / 1_000_000;
|
|
|
|
return sign + (v % 1 === 0 ? v.toFixed(0) : v.toFixed(1).replace('.', ',')) + 'jt';
|
|
}
|
|
|
|
if (abs >= 1_000) {
|
|
const v = abs / 1_000;
|
|
|
|
return sign + (v % 1 === 0 ? v.toFixed(0) : v.toFixed(1).replace('.', ',')) + 'rb';
|
|
}
|
|
|
|
return sign + abs.toString();
|
|
}
|