Iznos slovima

7,405 views
Skip to first unread message

Vlado

unread,
Nov 5, 2009, 3:59:52 PM11/5/09
to Ruby Hrvatska
Radim jednu aplikaciju koja između ostalog služi za ispis predračuna i
računa. Na računima je potrebno uz ukupan iznos ispisati isti iznos i
slovima, a mislim da je glupo da od korisnika tražim da unosi ove
iznose ručno.

Npr:

400.00 kn => četiristotinekuna
1,234.56 kn => tisućudvijestotridesetčetirikuneipedesetšestlipa

Da li je možda netko već radio (upravo radi) nešto slično, ili ima već
gotovu ideju kako ovo elegantno izvesti?

Hvala
Vlado

Mislav Marohnić

unread,
Nov 5, 2009, 4:41:12 PM11/5/09
to Vlado, Ruby Hrvatska
2009/11/5 Vlado <vlado...@gmail.com>

400.00 kn => četiristotinekuna
1,234.56 kn => tisućudvijestotridesetčetirikuneipedesetšestlipa

Uh, pa to je pravi izazov. Mozemo to pretvoriti u malo natjecanje, tko zavrsi s elegantijim rjesenjem pobijedi :)

Vlado, preporucam da sam to napravis za sad posto ne mislim da rjesenje vec postoji. 

Denis Bukvic

unread,
Nov 5, 2009, 7:13:01 PM11/5/09
to Mislav Marohnić, Vlado, Ruby Hrvatska
Hm, pa nije to tako teško, ali je fini izazov za doći sa lijepim algoritmom.

2009/11/5 Mislav Marohnić <mislav....@gmail.com>

Tomislav Car

unread,
Nov 5, 2009, 11:17:53 PM11/5/09
to Ruby Hrvatska
Mi smo imali nešto takvo tu u firmi napisano, ali je bilo u PHPu i
nisam ga ja pisao izvorno. Uzeo sam si sad malo truda i prebacio to u
Ruby:
http://github.com/carr/show_me_the_money

Malo sam to refaktorirao (moš mislit kako je bilo napisano u PHPu, još
prije 3 godine), ali još uvijek djeluje pomalo retardirano i kod bi se
mogao drastično popraviti.

Što se tiče funkcionalnosti, pretpostavlja se da sam vodiš "kune" i
"lipe", te ih proslijeđuješ klasi. Nekako mi je glupo tu uglavljivati
razne konverzije iz oblika kao
1,243.55
1.243,55
1234.55
i sve ostale opcije koje mogu doći. Ionako ti to moraš voditi kao
zasebne dijelove zbog računanja.


Podržava iznose riječima do 999 milijuna
>> ShowMeTheMoney.new.kune_in_words(999888777, 22)
=> "devetsto devedeset devet milijuna osamsto osamdeset osam tisu
\304\207a sedamsto sedamdeset sedam kuna i dvadeset dvije lipe"

Ako tvoj softver ima potrebe za izdavanjem računa s iznosima većima od
toga onda molim te da se nađemo na kavi neki dan :)



Ako netko želi pomoći s ovim, slobodno, nek forka, nek daje neke ideje
kako ga uljepšat i slično.

Recimo testove bi trebalo neke napisat. Željko, testeru stari? :))



Napomena, klasa ne računa 100% ispravno, što se može vidjeti iz
primjera "90300.00", a meni se sad ne da loviti taj bug.
Vjerojatno ima još takvih stvari, i upravo zato bi prvo testove neke
trebalo napisati i onda to poispravljat.

Pozdrav.

Željko Filipin

unread,
Nov 6, 2009, 3:39:54 AM11/6/09
to Mislav Marohnić, Vlado, Ruby Hrvatska
2009/11/5 Mislav Marohnić <mislav....@gmail.com>

> Uh, pa to je pravi izazov. Mozemo to pretvoriti u malo natjecanje, tko zavrsi s elegantijim rjesenjem pobijedi :)

Jao, već vidim da ću noćas nakon nekoliko pivi na twitupu prihvatiti izazov. :)

Željko
--
watir.com - community manager
watirpodcast.com - host



Željko Filipin

unread,
Nov 6, 2009, 3:41:55 AM11/6/09
to Tomislav Car, Ruby Hrvatska
2009/11/6 Tomislav Car <tomisl...@ka.t-com.hr>

> Recimo testove bi trebalo neke napisat. Željko, testeru stari? :))

Pa neću vam valjda morat pokazat kako se unit testovi pišu?!?! :)

U svakom slučaju, zanimljiv mali projekt, ako ne stignem ništa drugo, barem ću napisat nekoliko testova.

Željko

Damir

unread,
Nov 6, 2009, 4:54:14 AM11/6/09
to Ruby Hrvatska

Modul za Fixnum bi bilo elegantnije jer je prirodnije pisati npr.
1.23.to_currency nego ShowMeTheMoney.new.kune_in_words(kune, lipe).

Za factory metode koristi Class. factory_method umjesto
Class.new.factory_method.

Vlado

unread,
Nov 6, 2009, 5:05:57 AM11/6/09
to Ruby Hrvatska
Baš mi je drago da ima zainteresiranih i da se Ruby Hrvatska malo
aktivirala ;)

Upravo sam naišao na ovo i mislim da bi se dalo iskoristit
http://github.com/tomaszmazur/verbal

Željko Filipin

unread,
Nov 6, 2009, 5:11:02 AM11/6/09
to Vlado, Ruby Hrvatska
2009/11/6 Vlado <vlado...@gmail.com>

> Upravo sam naišao na ovo i mislim da bi se dalo iskoristit
> http://github.com/tomaszmazur/verbal

Ima i testove:

http://github.com/tomaszmazur/verbal/blob/master/spec/unit/english/numbers_spec.rb

Željko

Tomislav Car

unread,
Nov 6, 2009, 8:13:23 AM11/6/09
to Ruby Hrvatska
On Nov 6, 10:54 am, Damir <damir.r...@webteh.hr> wrote:
> Modul za Fixnum bi bilo elegantnije jer je prirodnije pisati npr.  
> 1.23.to_currency nego ShowMeTheMoney.new.kune_in_words(kune, lipe).

Naravno, moja ideja je bila da ovo ostane ko poseban library (modul
recimo) koji onda includeas u "nesto" (ko sta Rails pluginovi rade).
API neće sigurno bit ovakav, to sam skrkako sinoć u 4 u noći.

Ko sta sam reko, ja sam ovo napisao da pretvara kune i lipe u rijeci,
a sad kako mu ti posaljes kune i lipe, to je druga prica.

Ono sto ne kuzim u ovom tvom primjeru - 1.23 nije Fixnum nego Float, a
Floatovi su generalno nepovoljni za spremanje novčanih vrijednosti
(što vjerujem da znaš obzirom da si radio payment gateway :))


Iako, vjerojatno bi trebalo napraviti to da prihvaća raznorazne oblike
unosa novaca, tipa
"1.23" -> String
1.23 -> Float

(money gem sam ja znao koristiti za ta manipuliranja s novcima,
konverzije i slično)

Tomislav Car

unread,
Nov 6, 2009, 8:36:59 AM11/6/09
to Ruby Hrvatska
On Nov 6, 9:41 am, Željko Filipin <zeljko.fili...@wa-research.ch>
wrote:
> Pa neću vam valjda morat pokazat kako se unit testovi pišu?!?! :)

Evo, ima sad i testove nekakve, bacite pogled:
http://github.com/carr/show_me_the_money/blob/master/spec/unit/show_me_the_money_spec.rb

Trenutno samo jedan test pada.

Damir

unread,
Nov 6, 2009, 9:09:33 AM11/6/09
to Ruby Hrvatska

Include u Object pa radi za sve kaj se odaziva no to_f :))

?> 1.to_f
=> 1.0
>> 1.23.to_f
=> 1.23
>> "1.23".to_f
=> 1.23
>>

Reply all
Reply to author
Forward
0 new messages