Skip to content

Commit 66d1d50

Browse files
committed
feat: add numberToWords function
1 parent 11ce5ca commit 66d1d50

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed

numberToWords.ts

+94
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
function recursiveNumToWords(amount: number): string {
2+
const numberInText = [
3+
"",
4+
"satu",
5+
"dua",
6+
"tiga",
7+
"empat",
8+
"lima",
9+
"enam",
10+
"tujuh",
11+
"delapan",
12+
"sembilan",
13+
"sepuluh",
14+
"sebelas",
15+
];
16+
17+
if (amount < 12) {
18+
return numberInText[amount] as string;
19+
}
20+
if (amount < 20) {
21+
return recursiveNumToWords(amount - 10) + " belas";
22+
}
23+
if (amount < 100) {
24+
return (
25+
recursiveNumToWords(Math.floor(amount / 10)) +
26+
" puluh " +
27+
recursiveNumToWords(amount % 10)
28+
);
29+
}
30+
if (amount < 200) {
31+
return "seratus " + recursiveNumToWords(amount - 100);
32+
}
33+
if (amount < 1_000) {
34+
return (
35+
recursiveNumToWords(Math.floor(amount / 100)) +
36+
" ratus " +
37+
recursiveNumToWords(amount % 100)
38+
);
39+
}
40+
if (amount < 2_000) {
41+
return "seribu " + recursiveNumToWords(amount - 1_000);
42+
}
43+
if (amount < 1_000_000) {
44+
return (
45+
recursiveNumToWords(Math.floor(amount / 1_000)) +
46+
" ribu " +
47+
recursiveNumToWords(amount % 1_000)
48+
);
49+
}
50+
if (amount < 1_000_000_000) {
51+
return (
52+
recursiveNumToWords(Math.floor(amount / 1_000_000)) +
53+
" juta " +
54+
recursiveNumToWords(amount % 1_000_000)
55+
);
56+
}
57+
if (amount < 1_000_000_000_000) {
58+
return (
59+
recursiveNumToWords(Math.floor(amount / 1_000_000_000)) +
60+
" milyar " +
61+
recursiveNumToWords(amount % 1_000_000_000)
62+
);
63+
}
64+
if (amount < 1_000_000_000_000) {
65+
return (
66+
recursiveNumToWords(Math.floor(amount / 1_000_000_000_000)) +
67+
" trilyun " +
68+
recursiveNumToWords(amount % 1_000_000_000_000)
69+
);
70+
}
71+
return "";
72+
}
73+
74+
function trimExcessSpaces(input: string): string {
75+
return input.replace(/ +/g, " ").trim();
76+
}
77+
78+
function numberToWords(amount: number): string {
79+
return trimExcessSpaces(recursiveNumToWords(amount));
80+
}
81+
82+
// test
83+
// console.log(numberToWords(200_000));
84+
// console.log(numberToWords(250_000));
85+
// console.log(numberToWords(252_000));
86+
console.log(numberToWords(200_000) === "dua ratus ribu");
87+
console.log(numberToWords(250_000) === "dua ratus lima puluh ribu");
88+
console.log(numberToWords(252_000) === "dua ratus lima puluh dua ribu");
89+
console.log(numberToWords(2_000_000) === "dua juta");
90+
console.log(numberToWords(250_000_001) === "dua ratus lima puluh juta satu");
91+
console.log(
92+
numberToWords(11_987_654) ===
93+
"sebelas juta sembilan ratus delapan puluh tujuh ribu enam ratus lima puluh empat"
94+
);

0 commit comments

Comments
 (0)