unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Memo1: TMemo;
procedure Edit1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
function Terbilang (S : string) : string; forward;
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
Constraints.MinHeight := 240;
Constraints.MinWidth := 320;
Label1.Caption := 'Please provide a value:';
Label2.Caption := 'Terbilang: (in Indonesian)';
Edit1.Text := '';
Edit1.Anchors := [akTop, akLeft, akRight];
Memo1.Clear;
Memo1.ReadOnly := True;
Memo1.Anchors := [akTop, akBottom, akLeft, akRight];
end;
procedure TForm1.Edit1Change(Sender: TObject);
var
S: string;
i: Integer;
begin
Memo1.Clear;
S := Trim(Edit1.Text); // Remove spaces
if S.IsEmpty then Exit; // Nothing
if not(TryStrToInt(S, i)) then Exit; // Invalid integer
if S.Length > 8 then Exit; // Maximum support is 8 digits
Memo1.Text := Terbilang(S);
end;
// BEGIN of Terbilang Function
//
//----- This function is to convert integer to Indonesian Rupiah
//----- Written by Handoko, licensed in Public Domain
//----- https://forum.lazarus.freepascal.org/index.php/topic,59685.msg445487
function Terbilang (S : string) : string;
const
Angka : array ['0'..'9'] of string [9] =
('', 'satu ', 'dua ', 'tiga ', 'empat ', 'lima ', 'enam ',
'tujuh ', 'delapan ', 'sembilan ');
var
Hasil : string [108];
Z : string [8];
begin
if (S = '0') then begin
Terbilang := 'Nol.';
exit
end;
if (S [1] = '-') then begin
Terbilang := '( Negatif ).';
exit
end;
Z := S;
while (Z [0] < #8) do Z := '0' + Z;
case (Z [1]) of
'0' : if (Z [2] > '0') then Hasil := Angka [Z [2]] + 'juta '
else
Hasil [0] := #0;
'1' : case (Z [2]) of
'0' : Hasil := 'sepuluh juta ';
'1' : Hasil := 'sebelas juta '
else
Hasil := Angka [Z [2]] + 'belas juta '
end
else
Hasil := Angka [Z [1]] + 'puluh ' + Angka [Z [2]] + 'juta '
end;
case (Z [3]) of
'0' : ;
'1' : Hasil := Hasil + 'seratus '
else
Hasil := Hasil + Angka [Z [3]] + 'ratus '
end;
case (Z [4]) of
'0' : if ((Z [3] > '0') or (Z [4] > '0')) then
Hasil := Hasil + Angka [Z [5]] + 'ribu '
else
if (Z [5] = '1') then Hasil := Hasil + 'seribu '
else
if (Z [5] > '1') then
Hasil := Hasil + Angka [Z [5]] + 'ribu ';
'1' : case (Z [5]) of
'0' : Hasil := Hasil + 'sepuluh ribu ';
'1' : Hasil := Hasil + 'sebelas ribu '
else
Hasil := Hasil + Angka [Z [5]] + 'belas ribu '
end
else
Hasil := Hasil + Angka [Z [4]] + 'puluh ' + Angka [Z [5]] + 'ribu '
end;
case (Z [6]) of
'0' : ;
'1' : Hasil := Hasil + 'seratus '
else
Hasil := Hasil + Angka [Z [6]] + 'ratus '
end;
case (Z [7]) of
'0' : Hasil := Hasil + Angka [Z [8]];
'1' : case (Z [8]) of
'0' : Hasil := Hasil + 'sepuluh ';
'1' : Hasil := Hasil + 'sebelas '
else
Hasil := Hasil + Angka [Z [8]] + 'belas '
end
else
Hasil := Hasil + Angka [Z [7]] + 'puluh ' + Angka [Z [8]]
end;
Terbilang := Hasil + 'rupiah.'
end;
// END of Terbilang Function
end.