|
PHP PHP aplikacije, Smarty, PEAR |
|
Alati teme | Način prikaza |
25. 10. 2007. | #1 |
profesionalac
Professional
Datum učlanjenja: 11.10.2006
Lokacija: beograd, srbija
Poruke: 271
Hvala: 32
10 "Hvala" u 7 poruka
|
cifre u brojeve, za fakture i sl. obracune?
probao sam da pretrazim forum, ali ne znam ni kako bi ukucao search string!
elem, zadatak je (relativno) jednostavan: 1) ako imas neku cifru na racunu, recimo 452,318.00 dinara 2) to trebas da napises slovima, za isti primer bi trebalo: cetiristopedesetdvehiljadetristaosamnaestdinara e sad, ja krenuo da razlazem obicne cifre, uradio jedinice, desetice, stotine, hiljade, desetine hiljada.. i onda video nepravilnosti, pa probao da se pravim pametan i da optimizujem kod uz funckije, pa ispalo jos gore... PITANJE: - ima li neko gotovo resenje za ovo? sigurno jos neko mora da koristi ove stvari?? help? :P tip: 60 != sestdeset |
25. 10. 2007. | #2 | |
Milan Cvejic
Wrote a book
|
Citat:
resenja u smalltalku... Kôd:
PrivateNumberToWords: aNumber | rez imeBr celi cbroj tric trojka cs cd cj sl1 | aNumber isNilOrZero ifTrue: [rez := 'nula']. imeBr := (ItcLookupTable new) at: 1 put: 'jedan'; at: 2 put: 'dva'; at: 3 put: 'tri'; at: 4 put: 'četiri'; at: 5 put: 'pet'; at: 6 put: 'šest'; at: 7 put: 'sedam'; at: 8 put: 'osam'; at: 9 put: 'devet'; yourself. rez := ''. celi := aNumber integerPart. cbroj := celi itcAsInteger asLeadingZerosStringOfSize: 15. 1 to: 15 by: 3 do: [:each | tric := cbroj midString: 3 from: each. trojka := tric itcAsInteger. tric ~= '000' ifTrue: [cs := tric first itcAsInteger. cd := (tric at: 2) itcAsInteger. cj := (tric at: 3) itcAsInteger. cs = 2 ifTrue: [rez := rez , 'dve']. cs > 2 ifTrue: [rez := rez , (imeBr at: cs)]. cs = 1 ifTrue: [rez := rez , 'stotinu']. (#(2 3 4) includes: cs) ifTrue: [rez := rez , 'stotine']. cs > 4 ifTrue: [rez := rez , 'stotina']. cj isZero ifTrue: [sl1 := ''] ifFalse: [sl1 := imeBr at: cj]. cd = 4 ifTrue: [rez := rez , 'četr']. cd = 6 ifTrue: [rez := rez , 'šez']. cd = 5 ifTrue: [rez := rez , 'pe']. cd = 9 ifTrue: [rez := rez , 'deve']. (#(2 3 7 8) includes: cd) ifTrue: [rez := rez , (imeBr at: cd)]. cd = 1 ifTrue: [sl1 := ''. cj isZero ifTrue: [rez := rez , 'deset'] ifFalse: [cj = 1 ifTrue: [rez := rez , 'jeda'] ifFalse: [cj = 4 ifTrue: [rez := rez , 'četr'] ifFalse: [rez := rez , (imeBr at: cj)]]]. cj > 0 ifTrue: [rez := rez , 'naest']]. cd > 1 ifTrue: [rez := rez , 'deset']. ((#(4 10) includes: each) and: [cd ~= 1]) ifTrue: [cj = 1 ifTrue: [sl1 := 'jedna']. cj = 2 ifTrue: [sl1 := 'dve']]. rez := rez , sl1. each = 1 ifTrue: [rez := rez , 'bilion'. (cj > 1 or: [cd = 1]) ifTrue: [rez := rez , 'a']]. each = 4 ifTrue: [rez := rez , 'milijard'. (trojka \\ 100 > 11 and: [trojka \\ 100 < 19]) ifTrue: [rez := rez , 'i'] ifFalse: [cj = 1 ifTrue: [rez := rez , 'a'] ifFalse: [(cj > 4 or: [cj isZero]) ifTrue: [rez := rez , 'i'] ifFalse: [cj > 1 ifTrue: [rez := rez , 'e']]]]]. each = 7 ifTrue: [rez := rez , 'milion'. ((trojka \\ 100 > 11 and: [trojka \\ 100 < 19]) or: [cj ~= 1]) ifTrue: [rez := rez , 'a']]. each = 10 ifTrue: [rez := rez , 'hiljad'. (trojka \\ 100 > 11 and: [trojka \\ 100 < 19]) ifTrue: [rez := rez , 'a'] ifFalse: [(trojka = 1 and: [cj ~= 1]) ifTrue: [rez := rez , 'u'] ifFalse: [(cj > 4 or: [#(0 1) includes: cj]) ifTrue: [rez := rez , 'a'] ifFalse: [cj > 1 ifTrue: [rez := rez , 'e']]]]]]]. ^rez
__________________
http://weevify.com |
|
"Hvala" LiquidBrain za poruku: |
25. 10. 2007. | #3 |
profesionalac
Professional
Datum učlanjenja: 11.10.2006
Lokacija: beograd, srbija
Poruke: 271
Hvala: 32
10 "Hvala" u 7 poruka
|
u zivote.. nikada ne bi mogao da radim u smallTalku ali ipak budi nostalgiju, neodoljivo me podseca na Pascal gde sam dugo dugo pravio prve korake... kul, respect.
hvala za resenje Liquid!! probacu ovo da pre-kodiram u PHPu, pa ako mi uspe - kacim ga ovde, for future generations.. ^_^ GPL i to a ako neko u medjuvremenu naleti na ovo, i ima PHP resenje..... skidam kapu |
25. 10. 2007. | #4 |
Milan Cvejic
Wrote a book
|
U R welcome Samo sto ti ne dodaje ono dinara na kraju... jer mi je trebalo za razlicite valute... Inace zbog padza trebas samo da vidis koja je zadnja cifra pa na osnovu nje da odredis da li ce da stoji dinar ili dinara.
Ako je 1 onda je dinar ako je 5 onda je dinara Pozdrav.
__________________
http://weevify.com |
25. 10. 2007. | #5 |
emperor Selassie
Grand Master
|
Imam ja rešenje u Paskalu, ako ti nešto znači a i ja bih voleo da ga vidim realizovanog u PHPu
|
25. 10. 2007. | #6 |
novi član
Na probnom radu
Datum učlanjenja: 31.07.2007
Poruke: 23
Hvala: 0
7 "Hvala" u 5 poruka
|
Probaj ovo, trebalo bi da radi
Kôd:
function slova($broj) { $sZeroValue = 'nula dinara'; $StotiFormat = ' i %2.0f/100'; $Jedinice[0]=array('', 'jedna', 'dve', 'tri', 'cetiri', 'pet', 'sest', 'sedam', 'osam', 'devet', 'deset', 'jedanaest', 'dvanaest', 'trinaest', 'cetrnajest', 'petnaest', 'sesnaest', 'sedamnaest', 'osamnaest', 'devetnaest'); $Jedinice[1]=array('', 'jedan', 'dva', 'tri', 'cetiri', 'pet', 'sest', 'sedam', 'osam', 'devet', 'deset', 'jedanaest', 'dvanaest', 'trinaest', 'cetrnajest', 'petnaest', 'sesnaest', 'sedamnaest', 'osamnaest', 'devetnaest'); $Desetice= array ('','','dvadeset', 'trideset', 'cetrdeset', 'pedeset', 'sezdeset', 'sedamdeset', 'osamdeset', 'devedeset'); $Stotine= array ('', 'sto', 'dvesta', 'trista', 'cetirsto', 'petsto', 'sesto', 'sedamsto', 'osamsto', 'devetsto'); $Prilozi[1]= array("-1"=>' dinar', 'a', '', 'a', 'a', 'a', 'a'); $Prilozi[2]= array("-1"=>'hiljad', 'a', 'a', 'e', 'e', 'e', 'a'); $Prilozi[3]= array("-1"=>'milion', 'a', '', 'a', 'a', 'a', 'a'); $Prilozi[4]= array("-1"=>'milijard', 'i', 'a', 'e', 'e', 'e', 'i'); $SignPrefix=array('', 'minus '); $eCeo=abs(floor($broj)); $eStoti=substr(number_format($broj,2),-2); if (!$broj || !$eCeo) return $sZeroValue; $res=''; $s=number_format($eCeo,0,'.',''); while ((strlen($s)%3)!=0) { $s='0'.$s; }; for ($x=1;$x<=4;$x++) { $trojka=substr($s,strlen($s)-3,3); $s=substr($s,0,strlen($s)-3); if ($trojka=='') $trojka='000'; if ($trojka!='000') { if (($trojka[1]=='0') || ($trojka[1]=='1')) $temp=$Jedinice[$x % 2][($trojka[1].$trojka[2])*1]; else $temp=$Desetice[$trojka[1]].$Jedinice[$x %2][$trojka[2]*1]; $temp=$Stotine[$trojka[0]].$temp; if ((1*$trojka[1].$trojka[2])<=5) $temp.=$Prilozi[$x][-1].$Prilozi[$x][1*($trojka[1].$trojka[2])]; else $temp.=$Prilozi[$x][-1].$Prilozi[$x][5]; $res=$temp.$res; } }; return $res.' '.$eStoti.'/100 para'; }; Poslednja izmena od filjo : 25. 10. 2007. u 13:47. |
3 članova zahvaljuje filjo za poruku: |
25. 10. 2007. | #7 |
Goran Pilipović
Sir Write-a-Lot
|
zar se ne kaze pravilno "sedamstotina" a ne "sedamsto" ?
__________________
Goran Pilipović a.k.a. Ugly Fingers Bradley f.k.a. bluesman I don't always know what I'm talking about but I know I'm right! |
25. 10. 2007. | #8 |
Milan Cvejic
Wrote a book
|
Da, kaze se
__________________
http://weevify.com |
25. 10. 2007. | #9 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Ubeđen sam da je oboje pravilno.
|
25. 10. 2007. | #10 |
novi član
Na probnom radu
Datum učlanjenja: 31.07.2007
Poruke: 23
Hvala: 0
7 "Hvala" u 5 poruka
|
Heh, moze biti...
To sam prevodio sa nekog jezika (VB ili Delphi) i nisam se bas udubljivao u tu problematiku. |
|
|
Slične teme | ||||
Tema | Početna poruka teme | Forum | Odgovori | Poslednja poruka |
Clickatell ne voli MTEL 066 brojeve | mangia | Web aplikacije, web servisi i software | 8 | 11. 03. 2009. 16:06 |
charAt() za brojeve u JS? | bodi dilber | Sva početnička pitanja | 6 | 29. 08. 2008. 13:42 |
automatsko pretvaranje cifre u pisani oblik - kako? | sevalav | Programiranje | 9 | 27. 08. 2008. 22:58 |