-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtoIndonesianNumber.js
76 lines (61 loc) · 2.19 KB
/
toIndonesianNumber.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// Convert number to how it spelt in Bahasa Indonesia
// 2006 -> "dua ribu enam"
// dua = two
// ribu = thousand(s)
// enam = six
const ths = ["triliun", "miliar", "juta", "ribu"];
const nums = {
"1": "satu",
"2": "dua",
"3": "tiga",
"4": "empat",
"5": "lima",
"6": "enam",
"7": "tujuh",
"8": "delapan",
"9": "sembilan"
}
function toIndonesianNumber(number) {
if (number === 0) return "nol";
let str = "";
if (number < 0) {
str += "minus ";
number *= -1;
}
if (number > Number.MAX_VALUE) return `${str}tak terbatas`;
if (number >= 1000) {
for (let n = 0; n < ths.length; n++) {
const div = Math.pow(1000, ths.length - n);
const num = Math.floor(number / div);
if (div === 1000 && num === 1) {
str += "seribu ";
} else if (num > 0) {
const strnum = `${num}`;
str += `${strnum.length === 1 ? nums[strnum] : toIndonesianNumber(num)} ${ths[n]} `;
}
number %= div;
}
}
if (number < 1) return str.trim();
if (number === 10) return `${str}sepuluh`;
if (number === 11) return `${str}sebelas`;
const numstr = number.toString();
if (numstr.length === 1) return `${str}${nums[numstr]}`;
if (numstr.startsWith("1") && numstr.length === 2) return `${str}${nums[`${number - 10}`]} belas`
const puluh = numstr.length === 2;
const div = puluh ? 10 : 100;
const mod = number % div;
const num = Math.floor(number / div);
str += !puluh && num === 1 ? "seratus " : `${nums[`${num}`]} ${puluh ? "puluh" : "ratus"} `;
if (mod) str += puluh ? nums[`${mod}`] : toIndonesianNumber(mod);
return str.trim();
}
console.log(toIndonesianNumber(0)); // "nol"
console.log(toIndonesianNumber(1945)); // "seribu sembilan ratus empat puluh lima"
console.log(toIndonesianNumber(-1945)); // "minus seribu sembilan ratus empat puluh lima"
// One million
console.log(toIndonesianNumber(1000 * 1000)); // "satu juta"
// One billion
console.log(toIndonesianNumber(1000 * 1000 * 1000)); // "satu miliar"
// One trillion
console.log(toIndonesianNumber(1000 * 1000 * 1000 * 1000)); // "satu triliun"