Yaah untuk iseng-iseng daripada blog saya ga aktif. 🙂 Fungsi ‘terbilang’ pake C#. Saya sendiri masih newbie di C# dan fungsi ini belum pernah saya pake untuk produksi yang beneran. Sebenarnya fungsi ini hanya porting dari yang versi Pascal-nya (namanya juga baru belajar).

Seperti biasa, harap maklum, tidak ada dokumentasi apa-apa di kodingnya. Dan mohon masukan-masukan supaya fungsi ini bisa lebih bermanfaat lagi. 🙂

string[] satuan = new string[10] {"nol", "satu", "dua", "tiga", "empat",
  "lima", "enam", "tujuh", "delapan", "sembilan"};
string[] belasan = new string[10] {"sepuluh", "sebelas", "dua belas",
  "tiga belas", "empat belas", "lima belas", "enam belas", "tujuh belas",
  "delapan belas", "sembilan belas"};
string[] puluhan = new string[10] {"", "", "dua puluh",
  "tiga puluh", "empat puluh", "lima puluh", "enam puluh",
  "tujuh puluh", "delapan puluh", "sembilan puluh"};
string[] ribuan = new string[5] {"", "ribu", "juta", "milyar", "triliyun"};

string Terbilang(Decimal d)
{
  string strHasil = "";
  Decimal frac = d - Decimal.Truncate(d);

  if (Decimal.Compare(frac, 0.0m) != 0)
    strHasil = Terbilang(Decimal.Round(frac * 100)) + " sen";
  else
    strHasil = "rupiah";

  int nDigit = 0;
  int nPosisi = 0;

  string strTemp = Decimal.Truncate(d).ToString();
  for (int i = strTemp.Length; i > 0; i--)
  {
    string tmpBuff = "";
    nDigit = Convert.ToInt32(strTemp.Substring(i - 1, 1));
    nPosisi = (strTemp.Length - i) + 1;
    switch (nPosisi % 3)
    {
      case 1:
        bool bAllZeros = false;
        if (i == 1)
          tmpBuff = satuan[nDigit] + " ";
        else if (strTemp.Substring(i - 2, 1) == "1")
          tmpBuff = belasan[nDigit] + " ";
        else if (nDigit > 0)
          tmpBuff = satuan[nDigit] + " ";
        else
        {
          bAllZeros = true;
          if (i > 1)
            if (strTemp.Substring(i - 2, 1) != "0")
              bAllZeros = false;
          if (i > 2)
            if (strTemp.Substring(i - 3, 1) != "0")
              bAllZeros = false;
          tmpBuff = "";
        }

        if ((!bAllZeros) && (nPosisi > 1))
          if ((strTemp.Length == 4) && (strTemp.Substring(0, 1) == "1"))
            tmpBuff = "se" + ribuan[(int)Decimal.Round(nPosisi / 3m)] + " ";
          else
            tmpBuff = tmpBuff + ribuan[(int)Decimal.Round(nPosisi/3)] + " ";
        strHasil = tmpBuff + strHasil;
        break;
      case 2:
        if (nDigit > 0)
          strHasil = puluhan[nDigit] + " " + strHasil;
        break;
      case 0:
        if (nDigit > 0)
          if (nDigit == 1)
            strHasil = "seratus " + strHasil;
          else
            strHasil = satuan[nDigit] + " ratus " + strHasil;
        break;
    }
  }
  strHasil = strHasil.Trim().ToLower();
  if (strHasil.Length > 0)
  {
    strHasil = strHasil.Substring(0, 1).ToUpper() +
      strHasil.Substring(1, strHasil.Length - 1);
  } 

  return strHasil;
}
Iklan