Jump to content
php.lv forumi

Skaitļu pārveidotājs par tekstu


GedroX

Recommended Posts

Nu tādā gadījumā savieto vajadzīgās tekstuālās konstantes manā skriptā, papildus atdalot gadījumus ar skaitļiem 11, 12. Liekās, ka nevajadzētu būt problēmām.

 

Un kas tev nepatīk PEAR klasēs? Vari jau tikai konkrēto funkciju no tās izfiltrēt.

Edited by GedroX
Link to comment
Share on other sites

te pat kkur bija ...  [url=http://paste.php.lv/2304]http://paste.php.lv/2304[/url] Venom skatiijumaa :)

Smieklīgi! Vispār to kodu kāds ir testējis???

 

echo saynum(100);

..atgriež..

 

viens simts nulle

 

Un perfektu f-ju visām valodām nereāli uztaisīt. Vienalga pa vienai jāimplementē.

 

P.S. Paldies par atbalstu. Tomēr gribās arī dalīties ar to, kas sanāk, bet te notiek tikai [censored]...

Link to comment
Share on other sites

  • 4 years later...

Ievadot skaitli "151911351"

number2string izvada: simtu piecdesmit viens miljons deviņi simti vienpadsmit tūkstotis trīs simti piecdesmit viens

 

Kaut gan, vajadzētu: simtu piecdesmit viens miljons deviņi simti viendpadsmit tūkstoši trīs simti piecdesmit viens

 

Kā arī, ieteicams, ja lieto priekš grāmatvedības rēķiniem, tad lietot formu "viens simts ...", nevis "simtu ..."

 

Kā arī vārds miljons, rakstās "miljons" nevis "milijons"

Edited by darksign
Link to comment
Share on other sites

Ievadot skaitli "151911351"

number2string izvada: simtu piecdesmit viens miljons deviņi simti vienpadsmit tūkstotis trīs simti piecdesmit viens

 

Kaut gan, vajadzētu: simtu piecdesmit viens miljons deviņi simti viendpadsmit tūkstoši trīs simti piecdesmit viens

 

Kā arī, ieteicams, ja lieto priekš grāmatvedības rēķiniem, tad lietot formu "viens simts ...", nevis "simtu ..."

 

Kā arī vārds miljons, rakstās "miljons" nevis "milijons"

 

Te būs izlabotās funkcijas:

 

if (!function_exists('number2string'))
{
  function number2string($n)
  {
     $n = (int)$n;
     if ($n < 0) $b = 'mīnus ';
     $n = abs($n);
     if ($n == '0') return 'nulle';
     else return $b . _number2stringBig($n);
  }
}

if (!function_exists('_number2stringBig'))
{
  function _number2stringBig($n)
  {
     if ($n == '0') return;
     $e = Array(
        Array(
           '1' => 'tūkstotis',
           '2' => 'miljons',
           '3' => 'miljards',
        ),
        Array(
           '1' => 'tūkstoši',
           '2' => 'miljoni',
           '3' => 'miljardi',
        ),
     );
     $n = (string)(int)abs($n);
     $length = strlen((string)$n);
     $pow = ceil($length / 3) - 1;
     $digits = ($length - 1) % 3 + 1;

     $begin = substr($n, 0, $digits);
     $s = _number2stringSmall($begin);
     if ($pow > 0)
     {
        $end = substr($n, $digits);
        if (substr($begin, -1) == 1 && substr($begin, 0, 1) == 1)
        {
           $middle = $e[0][$pow];
        }
        else
        {
           $middle = $e[1][$pow];
        }
        $s .= ' ' . $middle;
        $s .= ' ' . _number2stringBig($end);
     }

     return $s;
  }
}

if (!function_exists('_number2stringSmall'))
{
  function _number2stringSmall($n)
  {
     $digits = Array('', 'viens', 'divi', 'trīs', 'četri', 'pieci', 'seši', 'septiņi', 'astoņi', 'deviņi');
     $preDigits = Array('', 'vien', 'div', 'trīs', 'četr', 'piec', 'seš', 'septiņ', 'astoņ', 'deviņ');
     $n = (string)(int)$n;
     $l = strlen($n);
     if ($l > 3) return false;
     if ($l == 3)
     {
        return ($n{0} == 1 ? (substr($n, 1) == '00' ? 'simts' : 'simtu') : $digits[$n{0}] . ' ' . 'simti') . ' ' . _number2stringSmall(substr($n, 1));
     }
     else
     {
        if ($l == 1) return $digits[$n];
        if ($n{0} == 1)
        {
           if ($n == '10') return 'desmit';
           return $preDigits[$n{1}] . 'padsmit';
        }
        $s = $preDigits[$n{0}] . 'desmit';
        if ($n{1} != '0')
        {
           $s .= ' ' . $digits[$n{1}];
        }
        return $s;
     }
  }
}

 

 

p.s. nepatīk paste.php.lv un nelietošu tīši, kamēr nebūs ieviesta tik nepieciešama lieta, kā utf8 kodējums ;)p

Edited by darksign
Link to comment
Share on other sites

ipk.. ;)

 

Kā arī, ieteicams, ja lieto priekš grāmatvedības rēķiniem, tad lietot formu "viens simts ...", nevis "simtu ..."

 

Ja vajag šādu formu, tad aizvietojam šo rindu:

 

        return ($n{0} == 1 ? (substr($n, 1) == '00' ? 'simts' : 'simtu') : $digits[$n{0}] . ' ' . 'simti') . ' ' . _number2stringSmall(substr($n, 1));

 

ar šo:

 

        return ($n{0} == 1 ? (substr($n, 1) == '00' ? 'simts' : 'viens simts') : $digits[$n{0}] . ' ' . 'simti') . ' ' . _number2stringSmall(substr($n, 1));

Link to comment
Share on other sites

×
×
  • Create New...