Convert string numbers( in word format) to integer ruby

后端 未结 4 1998
没有蜡笔的小新
没有蜡笔的小新 2021-01-24 18:43

If you have a string ten, is it possible to convert it to an integer 10 in Ruby? (maybe in rails?)

I value the developers at tryruby.org, and i

相关标签:
4条回答
  • 2021-01-24 18:45

    Since String#to_i picks out only the number characters, it will not work in the way you want. There may be some Rails method related to that, but it surely will not have the method name to_i because its behavior will conflict with the original intent of String#to_i.

    It is not only Strings that has to_i. NilClass, Time, Float, Rational (and perhaps some other classes) do as well.

    "3".to_i #=> 3
    "".to_i #=> 0
    nil.to_i #=> 0
    Time.now.to_i #=> 1353932622
    (3.0).to_i #=> 3
    Rational(10/3).to_i #=> 3
    
    0 讨论(0)
  • 2021-01-24 18:49

    This is a simple lookup of strings to their numeric equivalent:

    str_to_int_hash = {
      'zero'  => 0,
      'one'   => 1,
      'two'   => 2,
      'three' => 3,
      'four'  => 4,
      'five'  => 5,
      'six'   => 6,
      'seven' => 7,
      'eight' => 8,
      'nine'  => 9,
      'ten'   => 10
    }
    
    str_to_int_hash['ten']
    => 10
    

    It's obvious there are many other missing entries, but it illustrates the idea.

    If you want to go from a number to the string, this is the starting point:

    int_to_str_hash = Hash[str_to_int_hash.map{ |k,v| [v,k] }]
    int_to_str_hash[10]
    => "ten"
    
    0 讨论(0)
  • 2021-01-24 18:54

    How I would have done it.

    def n_to_s(int)
    
        set1 = ["","one","two","three","four","five","six","seven",
             "eight","nine","ten","eleven","twelve","thirteen",
             "fourteen","fifteen","sixteen","seventeen","eighteen",
             "nineteen"]
    
        set2 = ["","","twenty","thirty","forty","fifty","sixty",
             "seventy","eighty","ninety"]
    
        thousands = (int/1000)
        hundreds = ((int%1000) / 100)
        tens = ((int % 100) / 10)
        ones = int % 10
        string = ""
    
        string += set1[thousands] + " thousand " if thousands != 0 if thousands > 0
        string += set1[hundreds] + " hundred" if hundreds != 0
        string +=" and " if tens != 0 || ones != 0 
        string = string + set1[tens*10+ones] if tens < 2
        string += set2[tens]
        string = string + " " + set1[ones] if ones != 0     
        string << 'zero' if int == 0    
        p string
    end
    

    for the purpose of testing;

    n_to_s(rand(9999))
    
    0 讨论(0)
  • 2021-01-24 19:07

    Check out this gem for handling word to number conversions.

    From the readme:

    require 'numbers_in_words'
    require 'numbers_in_words/duck_punch'
    
    112.in_words
    #=> one hundred and twelve
    "Seventy million, five-hundred and fifty six thousand point eight nine three".in_numbers
    #=> 70556000.893
    
    0 讨论(0)
提交回复
热议问题