Number to English Word Conversion Rails

后端 未结 6 2227
灰色年华
灰色年华 2020-12-16 11:19

Anybody knows the method to convert the numericals to english number words in rails?

I found some Ruby scripts to convert numbericals to english words for correspon

相关标签:
6条回答
  • 2020-12-16 11:32

    How about this? Written for converting numbers to words in the Indian system, but can be easily modified.

    def to_words(num)
      numbers_to_name = {
          10000000 => "crore",
          100000 => "lakh",
          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"
        }
    
      log_floors_to_ten_powers = {
        0 => 1,
        1 => 10,
        2 => 100,
        3 => 1000,
        4 => 1000,
        5 => 100000,
        6 => 100000,
        7 => 10000000
      }
    
      num = num.to_i
      return '' if num <= 0 or num >= 100000000
    
      log_floor = Math.log(num, 10).floor
      ten_power = log_floors_to_ten_powers[log_floor]
    
      if num <= 20
        numbers_to_name[num]
      elsif log_floor == 1
        rem = num % 10
        [ numbers_to_name[num - rem], to_words(rem) ].join(' ')
      else
        [ to_words(num / ten_power), numbers_to_name[ten_power], to_words(num % ten_power) ].join(' ')
      end
    end
    
    0 讨论(0)
  • 2020-12-16 11:33

    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)
  • 2020-12-16 11:36

    No, you have to write a function yourself. The closest thing to what you want is number_to_human, but that does not convert 1 to One.

    Here are some URLs that may be helpful:

    • http://codesnippets.joyent.com/posts/show/447
    • http://raveendran.wordpress.com/2009/05/29/ruby-convert-number-to-english-word/
    • http://deveiate.org/projects/Linguistics/
    0 讨论(0)
  • 2020-12-16 11:36

    There is still the humanize gem that does exactly what you want...

    require 'humanize'
    23.humanize # => "twenty three"
    0.42.humanize(decimals_as: :digits) # => "zero point four two"
    
    0 讨论(0)
  • 2020-12-16 11:42

    You may also want to check gem 'rupees' - https://github.com/railsfactory-shiv/rupees to convert numbers to indian rupees (e.g. in Lakh, Crore, etc)

    0 讨论(0)
  • 2020-12-16 11:49

    Use the numbers_and_words gem, https://github.com/kslazarev/numbers_and_words

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