Format Uang dalam String dengan Pemisah Ribuan (Thousand Separator)

Mengapa menggunakan format uang dalam tipe data String? Ok, karena saya tidak menggunakan komponen-komponen yang berawalan TDB… Alasannya adalah masalah performance pada bidirectional dataset bla..bla…

Database biasanya menyimpan format uang dalam bentuk seperti: 1000.35. Nah, sekarang saya akan menggunakan fungsi berikut untuk menampilkannya di StringGrid atau Treeview dalam format 1,000.35. Tentu saja bentuk format bisa menjadi 1.000,35 bila anda set date format ke Indonesia misalnya.

function ThousandSeparator(sCurr: String): String;
var
  sMoney: String;
begin
  sMoney := FormatFloat('#,##0.00',StrToFloat(sCurr));
  Result := sMoney;
end;


Tunggu posting berikutnya tentang bagaimana cara menghilangkan thousand separator.

Konversi dari ShortDate String ke LongDate String Format

Bila saya mempunyai format tanggal pendek (ShortDate) dalam tipe String (mis: 02/05/2006), maka saya akan menggunakan function berikut untuk mengkonversinya ke format tanggal panjang (LongDate) dalam tipe String:

function LongDate(sDate: String): String;
var
  tTanggal: TDateTime;
  wTgl, wBln, wThn: Word;
begin
  ShortDateFormat := 'dd/mm/yyyy';
  tTanggal := StrToDate(sDate);
  DecodeDate(tTanggal,wThn,wBln,wTgl);
  tTanggal := EncodeDate(wThn, wBln, wTgl);
  Result := FormatDateTime('dddd, d mmmm yyyy', tTanggal);
end;

Sehingga dari "02/05/2006" setelah dikonversi akan menghasilkan bentuk tanggal seperti: "Selasa, 2 Mei 2006".

Memaksa Windows Mengikuti Format Tanggal Aplikasi

Saya biasa memaksa regional setting ms windows mengikuti setting aplikasi saya:

procedure FormatDate();
begin
  DateSeparator := '/';
  ShortDateFormat := 'dd/mm/yyyy';
  LongDateFormat  := 'dddd, dd/mmm/yyyy';
  SetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SSHORTDATE,
    'dd/MM/yyyy');

  ShortDayNames[1] := 'Aha';
  ShortDayNames[2] := 'Sen';
  ShortDayNames[3] := 'Sel';
  ShortDayNames[4] := 'Rab';
  ShortDayNames[5] := 'Kam';
  ShortDayNames[6] := 'Jum';
  ShortDayNames[7] := 'Sab';

  LongDayNames[1] := 'Ahad';
  LongDayNames[2] := 'Senin';
  LongDayNames[3] := 'Selasa';
  LongDayNames[4] := 'Rabu';
  LongDayNames[5] := 'Kamis';
  LongDayNames[6] := 'Jumat';
  LongDayNames[7] := 'Sabtu';

  LongMonthNames[1]  := 'Januari';
  LongMonthNames[2]  := 'Februari';
  LongMonthNames[3]  := 'Maret';
  LongMonthNames[4]  := 'April';
  LongMonthNames[5]  := 'Mei';
  LongMonthNames[6]  := 'Juni';
  LongMonthNames[7]  := 'Juli';
  LongMonthNames[8]  := 'Agustus';
  LongMonthNames[9]  := 'September';
  LongMonthNames[10] := 'Oktober';
  LongMonthNames[11] := 'November';
  LongMonthNames[12] := 'Desember';

  NegCurrFormat	     := 0;
  ThousandSeparator  := '.';
  DecimalSeparator   := ',';
  CurrencyDecimals   := 2;
end;

Semoga aku bisa menulis penjelasan procedure di atas dengan lebih baik lagi :)