Skip to content

For receipts, invoices, cheques, and deeds

1,000,001becomessatu juta satu

Type a number, get it in Indonesian words — or the other way round.

Nearly every Indonesian accounting system has to write terbilang, and most break in the same places: satu ribu for seribu, empty groups read aloud, and precision collapsing above triliun.

One ordinary number, end to end

Before touching anything: one unremarkable number, worked through step by step. The cases that break other implementations come after.

The steps

The number is cut every three digits from the right. Each piece is spelled on its own, then takes its scale word, then everything is joined. Every word below is computed by the library, intermediate values included.

  1. 4juta

    Spelled aloneempat

    In its placeempat juta

  2. 250ribu

    200 dua ratus+ 50 lima puluh

    Spelled alonedua ratus lima puluh

    In its placedua ratus lima puluh ribu

  3. 000

    worth zero — emits no words Konvensi pembacaan bilangan; PUEBI/EYD.

Joinedempat juta dua ratus lima puluh ribu

Without those two corrections

empat juta dua ratus lima puluh ribu

Just join the "spelled alone" column and name the zero groups too, and this is what comes out — the two most common wrong forms in the ecosystem, not an invented imitation.

This derivation shows the number alone. The rupiah suffix, sen, and capitalisation are applied to the finished amount, not to each piece.

Where other implementations break

The right column is computed by this library; the struck-through text is the common wrong form.

  • 1.000

    the se- fusion runs up to ribu

    seribu

    satu ribu

  • 1.000.001

    a 000 group emits nothing

    satu juta satu

    satu juta nol ribu satu

  • 9.007.199.254.740.993

    still exact above 2⁵³

    sembilan kuadriliun tujuh triliun seratus sembilan puluh sembilan miliar dua ratus lima puluh empat juta tujuh ratus empat puluh ribu sembilan ratus sembilan puluh tiga

    silently rounded by a number

The library behind it

values verified one by one, not sampled
1,000,001
directions: digits → words, and words → digits
2
runtime dependencies inside the library
0
precision stays exact past JavaScript's 2⁵³ limit
BigInt
01

Converter

Digits in, words out — and back again. The three-digit groups are drawn as you type, because that grouping is the algorithm.

Open the converter
02

Rules

Every rule with its citation and examples computed by the library at build time, including the refusals shown as refusals.

Read the rules
03

Survey

Published packages run against the same inputs, versioned and dated. A map of a shared problem, not a scoreboard.

See the survey