Tema: Re: php skaicius ->tekstas [kb]
Autorius: Jornada Del Muerto
Data: 2010-09-02 18:38:21
    PHP deja neturiu, aplamai mano nuomuone toks dalykas turetu ieiti i pvz. kad ir windows api prie regional settings ir vadintis kazkas tokio ToWords, na ir del PHP kazkas panasaus turetu buti bet deja nera:)

    Kazkada paciam reikejo ant C# sito gabalo, tai radau tik Visual Basic daryta, ji siunciu prie laisko, pats poto su kazkokiu Visual Basic to C# toolsu konvertavau i C#, na C# sintakse panasesne i PHP nei VB, tai duodu ir savaji varianta, tiesa ta funkcija reiketu rimciau perrasyti, man tiesiog nebuvo laiko, na bet gal pravers (visumoje sis variantas yra grubus vertimas is VB i C#):

  public static string SumaZodziais (decimal suma, bool itIsMoney)
  {
   Int64 sveikaDalis = (Int64)suma;
   string retVal = sveikaDalis.ToString ();

   int I;
   int J;
   int K;
   int sumaLength = retVal.Length;

   int[] Narys = new int[8];
   bool Nedesimt;

   string[] Vienas = { "vienas ", "du ", "trys ", "keturi ", "penki ", "ei ", "septyni ", "atuoni ", "devyni " };
   string[] Lika = { "vienuolika ", "dvylika ", "trylika ", "keturiolika ", "penkiolika ", "eiolika ", "septyniolika ", "atuoniolika ", "devyniolika " };
   string[] Desimt = { "deimt ", "dvideimt ", "trisdeimt ", "keturiasdeimt ", "penkiasdeimt ", "eiasdeimt ", "septyniasdeimt ", "atuoniasdeimt ", "devyniasdeimt " };
   string[] Simtas = { "imtas ", "imtai " };
   string[] Tukst = { "tkstantis ", "tkstaniai ", "tkstani " };
   string[] Milion = { "milijonas ", "milijonai ", "milijonu " };

   if (sumaLength < 10)
   {
    for (I = sumaLength - 1; I >= 0; I--)
    {
     Narys[sumaLength - (I + 1)] = Convert.ToInt32 (
      retVal.Substring (I, 1));
    }

    if (suma < 0)
     retVal = "minus ";
    else
     retVal = "";

    K = 0;
    for (J = (sumaLength - 1) / 3; J >= 0; J--)
    {
     Nedesimt = false;
     for (I = sumaLength - 1 - K; I >= J * 3; I--)
     {
      switch (I - J * 3)
      {
       case 2:
        if (Narys[I] != 0)
        {
         retVal = retVal + Vienas[Narys[I] - 1];
         if (Narys[I] == 1)
          retVal = retVal + Simtas[0];
         else
          retVal = retVal + Simtas[1];
        }
        break;
       case 1:
        if (Narys[I] == 1 & Narys[I - 1] != 0)
        {
         Nedesimt = true;
        }
        else
        {
         if (Narys[I] != 0)
          retVal = retVal + Desimt[Narys[I] - 1];
        }
        break;

       case 0:
        if (Nedesimt)
        {
         retVal = retVal + Lika[Narys[I] - 1];
        }
        else
        {
         if (Narys[I] != 0)
          retVal = retVal + Vienas[Narys[I] - 1];
        }
        break;

      }
     }
     K = sumaLength - J * 3;
     switch (J)
     {
      case 0:
       if (retVal == "" | retVal == "minus ")
       {
        retVal = retVal + "nulis ";
       }

       if (itIsMoney)
       {
        int centai = (int)(Math.Round (suma- sveikaDalis, 2) * 100);
        retVal += "Lt. " + string.Format("{0:00}", centai) + " ct."; // VBA: Str = Str & "Lt " & Format((Abs(Suma) - Int(Abs(Suma))) * 100, "00") & " ct"

       }
       break;

      case 1:
       if (K == 1 | (Narys[J * 3] != 0 & Narys[1 + J * 3] != 1))
       {
        if (Narys[J * 3] == 1)
         retVal += Tukst[0];
        else
         retVal += Tukst[1];
       }
       else
       {
        if (Narys[3] + Narys[4] + Narys[5] != 0)
         retVal += Tukst[2];
       }
       break;

      case 2:
       if (K == 1 | (Narys[J * 3] != 0 & Narys[1 + J * 3] != 1))
       {
        if (Narys[J * 3] == 1)
         retVal = retVal + Milion[0];
        else
         retVal = retVal + Milion[1];
       }
       else
       {
        retVal = retVal + Milion[2];
       }
       break;

     }
    }
    return retVal;
    //Zodis = Chr (Asc (retVal) - 32) + Right (retVal , Len (retVal) - 1);
   }
   else
   {
    return "Tiek negali buti";
   }
  }

  public enum DigitType 
  {
   Quantity,
   Money
  }

  // private because unfinished to not use this
  static string ToWords (
   double suma,
   DigitType type)
  {
   int I, J, K;
   string retVal = string.Empty;
   bool Nedesimt;
   string sveikaDalis = ((Int64)suma).ToString ();

   // predefine data arrays
   string[] Vienas = { "vienas ", "du ", "trys ", "keturi ", "penki ", "ei ", "septyni ", "atuoni ", "devyni " };
   string[] Lika = { "vienuolika ", "dvylika ", "trylika ", "keturiolika ", "penkiolika ", "eiolika ", "septyniolika ", "atuoniolika ", "devyniolika " };
   string[] Desimt = { "deimt ", "dvideimt ", "trisdeimt ", "keturiasdeimt ", "penkiasdeimt ", "eiasdeimt ", "septyniasdeimt ", "atuoniasdeimt ", "devyniasdeimt " };
   string[] Simtas = { "imtas ", "imtai " };
   string[] Tukst = { "tkstantis ", "tkstaniai ", "tkstani " };
   string[] Milion = { "milijonas ", "milijonai ", "milijon " };

   if (suma.ToString ().Length < 10)
   {
    if (suma < 0)
     retVal = "minus ";
    else
     retVal = "";

    K = 0;
    for (J = (sveikaDalis.Length - 1) / 3; J >= 0; J--)
    {
     Nedesimt = false;
     for (I = sveikaDalis.Length - 1 - K; I >= J * 3; I--)
     {
      switch (I - J * 3)
      {
       case 2:
        if (sveikaDalis[I] != 0)
        {
         retVal = retVal + Vienas[sveikaDalis[I] - 1];
         if (sveikaDalis[I] == 1)
          retVal = retVal + Simtas[0];
         else
          retVal = retVal + Simtas[1];
        }
        break;
       case 1:
        if (sveikaDalis[I] == 1 & sveikaDalis[I - 1] != 0)
        {
         Nedesimt = true;
        }
        else
        {
         if (sveikaDalis[I] != 0)
          retVal = retVal + Desimt[sveikaDalis[I] - 1];
        }
        break;

       case 0:
        if (Nedesimt)
        {
         retVal = retVal + Lika[sveikaDalis[I] - 1];
        }
        else
        {
         if (sveikaDalis[I] != 0)
          retVal = retVal + Vienas[sveikaDalis[I] - 1];
        }
        break;

      }
     }
     K = sveikaDalis.Length - J * 3;
     switch (J)
     {
      case 0:
       if (retVal == "" | retVal == "minus ")
        retVal = retVal + "nulis ";
       if (type == DigitType.Money)
       {
#warning todo: implement suma zodziais jei reiks centu ar pinigu
        //retVal += "Lt " + Format ((Abs (suma) - Int (Abs (suma))) * 100, "00") + " ct";
       }
       break;
      case 1:
       if (K == 1 | (sveikaDalis[J * 3] != 0 & sveikaDalis[1 + J * 3] != 1))
       {
        if (sveikaDalis[J * 3] == 1)
         retVal += Tukst[0];
        else
         retVal += Tukst[1];
       }
       else
       {
        if (sveikaDalis[3] + sveikaDalis[4] + sveikaDalis[5] != 0)
         retVal += Tukst[2];
       }
       break;

      case 2:
       if (K == 1 | (sveikaDalis[J * 3] != 0 & sveikaDalis[1 + J * 3] != 1))
       {
        if (sveikaDalis[J * 3] == 1)
         retVal = retVal + Milion[0];
        else
         retVal = retVal + Milion[1];
       }
       else
       {
        retVal = retVal + Milion[2];
       }
       break;

     }
    }
    return retVal;
   }
   else
   {
    return "Skaiius per didelis";
   }

   return retVal;
  }
 }



Freelancer Developer
www.lythum.lt