Module: PolishNumber
- Defined in:
- lib/polish_number.rb
Constant Summary collapse
- HUNDREDS =
['', 'sto ', 'dwieście ', 'trzysta ', 'czterysta ', 'pięćset ', 'sześćset ', 'siedemset ', 'osiemset ', 'dziewięćset ']
- TENS =
['', 'dziesięć ', 'dwadzieścia ', 'trzydzieści ', 'czterdzieści ', 'pięćdziesiąt ', 'sześćdziesiąt ', 'siedemdziesiąt ', 'osiemdziesiąt ', 'dziewięćdziesiąt ']
- TEENS =
['', 'jedenaście ', 'dwanaście ', 'trzynaście ', 'czternaście ', 'piętnaście ', 'szesnaście ', 'siedemnaście ', 'osiemnaście ', 'dziewiętnaście ']
- UNITIES =
['', 'jeden ', 'dwa ', 'trzy ', 'cztery ', 'pięć ', 'sześć ', 'siedem ', 'osiem ', 'dziewięć ']
- ZERO =
'zero'
- THOUSANDS =
['', 'tysiąc ', 'tysiące ', 'tysięcy ']
- AND =
'i '
- DECIMALS =
['', 'dziesiąta ', 'dziesiąte ', 'dziesiątych ']
Class Method Summary collapse
Class Method Details
.translate(number) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/polish_number.rb', line 23 def self.translate(number) number = number.to_f unless (0..999999.99).include? number raise ArgumentError, 'number should be in 0..999999.99 range' end return ZERO.dup if number == 0.0 formatted_number = sprintf("%09.2f", number) digits = formatted_number.chars.map { |char| char.to_i } result = '' result << process_0_999(digits[0..2]) result << pluralize(digits[1..2], THOUSANDS) result << process_0_999(digits[3..5]) # skip the 6th digit - it was a decimal dot fraction = process_0_99(digits[7..8]) unless fraction == '' result << AND result << fraction result << pluralize(digits[7..8], DECIMALS) end result.strip! result end |