2015-05-04 54 views
3

我知道某处有宝石。试图没有宝石来实现它。我只需要英文单词的数字来表示整数。发现这个,但它非常混乱。如果您对如何实施清洁更容易阅读解决方案有任何想法,请分享。将数字转换为轨道上的红宝石字

+0

试试这个https://github.com/雷达/人文化 –

回答

3

如果你不希望使用任何Gem然后....

试试这个(这将转化高达万元):

def in_words(int) 
    numbers_to_name = { 
     1000000 => "million", 
     1000 => "thousand", 
     100 => "hundred", 
     90 => "ninety", 
     80 => "eighty", 
     70 => "seventy", 
     60 => "sixty", 
     50 => "fifty", 
     40 => "forty", 
     30 => "thirty", 
     20 => "twenty", 
     19=>"nineteen", 
     18=>"eighteen", 
     17=>"seventeen", 
     16=>"sixteen", 
     15=>"fifteen", 
     14=>"fourteen", 
     13=>"thirteen",    
     12=>"twelve", 
     11 => "eleven", 
     10 => "ten", 
     9 => "nine", 
     8 => "eight", 
     7 => "seven", 
     6 => "six", 
     5 => "five", 
     4 => "four", 
     3 => "three", 
     2 => "two", 
     1 => "one" 
    } 
    str = "" 
    numbers_to_name.each do |num, name| 
    if int == 0 
     return str 
    elsif int.to_s.length == 1 && int/num > 0 
     return str + "#{name}"  
    elsif int < 100 && int/num > 0 
     return str + "#{name}" if int%num == 0 
     return str + "#{name} " + in_words(int%num) 
    elsif int/num > 0 
     return str + in_words(int/num) + " #{name} " + in_words(int%num) 
    end 
    end 
end 



puts in_words(4) == "four" 
puts in_words(27) == "twenty seven" 
puts in_words(102) == "one hundred two" 
puts in_words(38_079) == "thirty eight thousand seventy nine" 
puts in_words(82102713) == "eighty two million one hundred two thousand seven hundred thirteen"