Jump to content
php.lv forumi

Recommended Posts

Posted

Uz ātru roku uzrakstīju funkciju number2string, ar kuras palīdzību var pārveidot skaitli tā tekstuālā pierakstā. Varbūt kādam noder. Kļūdas, komentāri? Varbūt kautkur jau bija (es nevarēju atrast)?

Posted (edited)

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
Posted

Un priekš kam bija jātaisa sava f-ja, ja jau ir PEAR? ;)

Kāda starpība, kas man patīk un kas nepatīk... f-ja der tikai LV.. un tas nerulz..

Posted

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]...

Posted

Bā! Nu gan beztolkā tev bazars. Nu sākumā tev PEAR nepatīk, tagad saki, ka vajaga klasi.. Manu funkcju iemet PEAR klasē un ir tev klase ar vairāku valodu atbalstu, tajā skaitā arī LV.

  • 4 years later...
Posted (edited)

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
Posted (edited)

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
Posted

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));

×
×
  • Create New...