Di milis delphindo dari tahun ke tahun banyak para new comer yang nanya program untuk mengkonversi dari numerik menjadi string dalam format kata-kata. Atau banyak yang nyebut sebagai rutin terbilang. Ada beberapa sesepuh milis yang merujuk ke site tertentu atau arsip milis untuk menjawab pertanyaan ini. Tapi, sebagai alternatif, berikut saya coba berikan rutin terbilang.
function NumberToText(FValue: Double): string;
var
i, nPosisi, nDigit: Integer;
bAllZeros: Boolean;
strHasil, strTemp, tmpBuff: string;
begin
if Frac(FValue) <> 0 then
strHasil := NumberToText(Round(Frac(FValue) * 100)) + ' sen'
else
strHasil := '';
strTemp := FloatToStr(Int(FValue));
for i := Length(strTemp) downto 1 do
begin
nDigit := StrToInt(Copy(strTemp, i, 1));
nPosisi := (Length(strTemp) - i) + 1;
case (nPosisi mod 3) of
1:
begin
bAllZeros := False;
if i = 1 then
tmpBuff := Satuan[nDigit] + ' '
else if (Copy(strTemp, i - 1, 1) = '1') then
tmpBuff := Belasan[nDigit] + ' '
else if nDigit > 0 then
tmpBuff := Satuan[nDigit] + ' '
else
begin
bAllZeros := True;
if i > 1 then
if Copy(strTemp, i - 1, 1) <> '0' then
bAllZeros := False;
if i > 2 then
if Copy(strTemp, i - 2, 1) <> '0' then
bAllZeros := False;
tmpBuff := '';
end;
if (bAllZeros = False) and (nPosisi > 1) then
if (Length(strTemp) = 4) and
(Copy(strTemp, 1, 1) = '1') then
tmpBuff := 'se' + Ribuan[Round(nPosisi / 3)] + ' '
else
tmpBuff := tmpBuff + Ribuan[Round(nPosisi / 3)] + ' ';
strHasil := tmpBuff + strHasil;
end;
2: if nDigit > 0 then
strHasil := Puluhan[nDigit] + ' ' + strHasil;
0: if nDigit > 0 then
if nDigit = 1 then
strHasil := 'seratus ' + strHasil
else
strHasil := Satuan[nDigit] + ' ratus ' + strHasil;
end;
end;
if Length(strHasil) > 0 then
strHasil := UpperCase(Copy(strHasil, 1, 1)) +
Copy(strHasil, 2, Length(strHasil) - 1);
Result := strHasil;
end;
Sorry nggak ada comment atau uraian apa-apa, ya. Soalnya rutin ini udah lama saya punya, dan kepakenya juga baru sekali doang. Rutin ini juga hasil kontribusi dari beberapa pihak, cuman saya udah nggak jelas lagi sumbernya dari mana aja.
Mudah-mudahan di waktu yang akan datang saya sempat update post ini untuk uraian yang lebih jelas lagi.
Mohon koreksi ato bug report-nya, ya via comments below.
Oh ya, satu lagi, ini rutin belum dicoba di FreePascal, baru pernah dipake di Delphi doang.
Jumat, 28 Juli 2006 at 13:44
Luar biasa, ini adalah rutin yang sangat indah menurut saya, dan bekerja sempurna sekali. Tapi kira-kira jalan ndak ya, wong aku blom coba tuh. Hehehe.
Jumat, 28 Juli 2006 at 16:38
Ha..ha.. si boss nongol disini…
Sabtu, 29 Juli 2006 at 13:01
fungsi terbilangnya emang udah bisa berjalan. Tapi yang versi inggrisnya gimana ya?
bapak bisa bantuin saya ga?
Mohon bantuan nya ya!
terima kasih banyak. atas dibacanya comment ini.
Senin, 31 Juli 2006 at 9:03
Sorry, habis wik-en, jadi baru kebaca sekarang.
Thanks udah test rutinnya.
Kalo yg bahasa Inggris kayaknya banyak di internet. Coba google dg keyword ‘numbers to words delphi’.
Salah satunya mungkin bisa dilihat di sini
Gut lak…
Kamis, 19 Juli 2007 at 14:17
[...] belum pernah saya pake untuk produksi yang beneran. Sebenarnya fungsi ini hanya porting dari yang versi Pascal-nya (namanya juga baru [...]