Using Ruby convert numbers to words?

前端 未结 8 1366
广开言路
广开言路 2020-12-09 19:30

How to convert numbers to words in ruby?

I know there is a gem somewhere. Trying to implement it without a gem. I just need the numbers to words in English for integ

相关标签:
8条回答
  • 2020-12-09 20:14
    def subhundred number
    
      ones = %w{zero one two three four five six seven eight nine
                ten eleven twelve thirteen fourteen fifteen
                sixteen seventeen eighteen nineteen}
    
      tens = %w{zero ten twenty thirty **forty** fifty sixty seventy eighty ninety}
    
      subhundred = number % 100
    
      return [ones[subhundred]] if subhundred < 20
    
      return [tens[subhundred / 10]] if subhundred % 10 == 0
    
      return [tens[subhundred / 10], ones[subhundred % 10]]
    
    end
    
    
    
    
    def subthousand number
    
      hundreds = (number % 1000) / 100
    
      tens = number % 100
    
      s = []
    
      s = subhundred(hundreds) + ["hundred"] unless hundreds == 0
    
      s = s + ["and"] unless hundreds == 0 or tens == 0
    
      s = s + [subhundred(tens)] unless tens == 0
    
    
    end
    
    
    
    
    def decimals number
    
      return [] unless number.to_s['.']
    
      digits = number.to_s.split('.')[1].split('').reverse
    
      digits = digits.drop_while {|d| d.to_i == 0} . reverse
    
      digits = digits.map {|d| subhundred d.to_i} . flatten
    
      digits.empty? ? [] : ["and cents"] + digits
    
    end
    
    
    
    
    
    def words_from_numbers number
    
      steps = [""] + %w{thousand million billion trillion quadrillion quintillion sextillion}
    
      result = []
    
      n = number.to_i
    
      steps.each do |step|
    
        x = n % 1000
    
        unit = (step == "") ? [] : [step]
    
        result = subthousand(x) + unit  + result unless x == 0
    
        n = n / 1000
    
      end
    
    
    
      result = ["zero"] if result.empty?
    
      result = result + decimals(number)
    
    
    
    
      result.join(' ').strip
    
    end
    
    
    
    
    
    
     def words_from_numbers(number)
    
        ApplicationHelper.words_from_numbers(number)
    
      end
    
    0 讨论(0)
  • 2020-12-09 20:15

    You can also use the to_words gem.

    This Gem converts integers into words.

    e.g.

    1.to_words # one ,
    
    100.to_words # one hundred ,
    
    101.to_words # one hundred and one
    

    It also converts negative numbers.

    0 讨论(0)
提交回复
热议问题