Jump to content
php.lv forumi

Recommended Posts

Posted

Vai kādam ir gatava funkcija, kā iegūt no skaitļa, piemēram 1234.45 summu vārdiem? Lai iznāktu: Viens tūkstotis divi simti trīsdesmit četri LVL 45 santīmi.

Posted (edited)

tu gan laikam joko :)

 

raxti katram ciparam kodu

 

$sk = 1245;

if($sk == "1245"){

echo "Tuukstotc divi simti cetrdesmit pieci";

}

 

:)))))

pascal valodaa tas ir iespeejams bet par php nav ne jausmas

Edited by Klez
Posted

Nu es nezinu vai tā būtu gluži pareizi, bet es darītu šādi:

<?
$text = "123,43"
$text = str_replace("1", "viens", $text);
$text = str_replace("2", "divi", $text);
$text = str_replace("3", "trīsi", $text);
$text = str_replace("4", "četrii", $text);
?>
tad noteiktu cik tag ir symboli textā ar strlen()
un atiecīgi ja 3symboli pirms komata  tad smimts ja 4 tad tūlkstoc utt

varbūt tas nav tas gudrakais idejas risinājums, bet tāds ir

Posted

pamatpieeja šamai problēmai ir sadalīt skaitli pēc desmitrangiem:

 

1234 = 1*1000+2*100+3*10+4

 

attiecīgiem skaitļiem 0-9 izvedo masīvu ar nosaukumiem (divi,trīs...)/rangu nosaukumiem (div,četr - priekš + desmit), un pēc tam pieapstrādā dažādus izņēmumums, piem.: 1 pieliekams "tūkstotis","simts" pārējiem - "tūkstoši","simti".

 

attiecīgos rangus var tālāk sadalīt pēc tās pašas sistēmas (xx tūkstoši. xxx tūkstoši).

 

PS>gūglei ir daudz šādu skriptu gan krievu gan citam valodām, tā kā var vienkārši pārtulkot.

  • 8 years later...
Posted

Tā kā latviski forumos jēdzīgu atbildi neatradu šim jautājumam, tad nolēmu pats uzrakstīt skriptiņu, jo pašam savajadzējās, tas gan ir standalone skripts izveidots, kas saņem datus no $_GET parametriem, bet ja nu kādam noder...

<?php
$language['parts'][0] = 'santīmi';
$language['part'][0] = 'santīms';
$language['parts'][2] = 'lati';
$language['part'][2] = 'lats';

$language['parts'][3] = 'tūkstoši';
$language['part'][3] = 'tūkstotis';
$language['parts'][4] = 'miljoni';
$language['part'][4] = 'miljons';
$language['parts'][5] = 'miljardi';
$language['part'][5] = 'miljards';

$language['parts']['hundred'] = 'simti';
$language['part']['hundred']= 'simts';

$language['tens'] = array("Desmit","Divdesmit","Trīsdesmit","Četrdesmit","Piecdesmit","Sešdesmit","Septiņdesmit","Astoņdesmit", "Deviņdesmit");
$language['teens'] = array("Vienpadsmit","Divpadsmit","Trīspadsmit","Četrpadsmit","Piecpadsmit","Sešpadsmit","Septiņpadsmit","Astoņpadsmit", "Deviņpadsmit");
$language['ones'] = array("Viens","Divi","Trīs","Četri","Pieci","Seši","Septiņi","Astoņi", "Deviņi");

$say = '';
$number = $_GET['sum'];

$number = explode('.', $number);

$big = $number[0];
$small = $number[1];

while(strlen($big)){
 $bigs[] = substr($big, -3, 3);
 $big = substr($big, 0, -3);
}
krsort($bigs);

foreach($bigs as $key => $value){
 ptw($value, $key);
}

function ptw($number, $part){
 global $language, $say;

 $teens = false;

 while( strlen($number)<3 )
  $number = ' ' . $number;

 if($number[0]!=' ')
  $say .= $language['ones'][ $number[0]-1 ] . ' ' . $language['parts']['hundred'] . ' ';

 if($number[1]!=' '){
  if($number[1]==1)
   $teens = true;
  else
   $say .= $language['tens'][ $number[1]-1 ] . ' ';
 }

 if($teens)
  $say .= $language['teens'][ $number[2]-1 ] . ' ';
 else
  $say .= $language['ones'][ $number[2]-1 ] . ' ';


 if($number[2]==1 && !$teens)
  $say .= $language['part'][$part+2] . ' ';
 else
  $say .= $language['parts'][$part+2] . ' ';
}

$say .= ', ' . $small . ' ' . $language['parts'][0];

echo mb_substr($say,0,1).mb_strtolower(mb_substr($say,1), 'UTF-8');

  • 8 months later...
Posted

Izmēģināju funkciju, bet tiešām - ļoti nepilnīga :( sorry.

 

Saprotu, ka intelektuālais īpašums un tā ... bet - vai kādam tomēr nav gatava strādājoša funkcija uz šo? 

Vai tiešām to php neviens neizmanto? 

 

PEAR neder, jo ne vienmēr uz servera ir supports.

 

 

Posted (edited)

https://github.com/jurchiks/numbers2words

Rakstīju ļoti sen, kad tikko sāku programmēt PHP, bet šis tika izmantots kredītu rēķinos sohocredit.lv (latviski, krieviski, lietuviski, angliski, spāniski - nācās mācīties skaitīt spāniski :D). Priekš summām zem 100k pietika.

Derētu uzprišināt kodu, tagad lasu un izskatās bik nesmuki. Bet nu to jau kādu citu dienu.

 

+ doma kaut kad piepliķēt klāt vēl citas valodas, tad jau redzēs.

Edited by jurchiks
Posted (edited)

Jopt, tu issues manā kodā iepostēji tā otra projekta bugtrackerī...

Anyway, rīt paskatīšos, kas un kā.

 

P.S. es toreiz naudas summu izvadīšanai izmantoju "Ls" un "sant", tad nebija jāuztraucās par viensk./daudzsk. formām.

Edited by jurchiks
  • 3 months later...
Posted

http://www.php.net/manual/en/class.numberformatter.php
Mēģināju nesen darbā šo piekurbulēt, kaut kā nesanāca, kaut gan PHP 5.5.4 stāv uz kastes un intl extension ir ieslēgts.
Pievērsiet uzmanību pašam apakšējam komentāram:

<?php
$f = new NumberFormatter("en", NumberFormatter::SPELLOUT);
echo $f->format(123456);
?>

Produces the result:
one hundred twenty-three thousand four hundred fifty-six

Iespējams, ka tā padarīšana spēj arī citās valodās to izdarīt, bet, kā jau minēju, man neizdevās pat palaist...

Posted

1. Šādu scriptu izveidot tev pašam prasīs ne vairāk ka 15minūtes.

2. Manuprāt vienīgais iemesls šo topiku kustināt ir tikai tad, ja esi izveidojis modifikāciju priekš eiro ar pāriešanas datumiem, kursa starpībām utt.

×
×
  • Create New...