Ruby/Number/Convert to Integer

Материал из Wiki.crossplatform.ru

Версия от 17:59, 13 сентября 2010; ViGOur (Обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Содержание

ArgumentError: invalid value for Integer: "ights"

Integer("1001 nights")



convert a binary number from a string

puts Integer("0b11110010")



convert a character code

puts Integer(z)



convert a floating-point number

puts Integer(1.4)



convert a hexadecimal number

puts Integer(0x20)



convert an octal number

puts Integer(0177)



convert a string

puts Integer("256")



Converting Between Characters and Values

?a                       # => 97
?!                       # => 33
?\n                      # => 10
"a"[0]                   # => 97
"bad sound"[1]           # => 97



Converting Between Classes

puts "12" + "10"
puts 12 + 10
puts "12".to_i + "10".to_i
puts 12.to_s + 10.to_s



Convert string to integer by parameter

"1045".to_i(10)                   # => 1045
"-1001001".to_i(2)                # => -73
"abc".to_i(16)                    # => 2748
"abc".to_i(20)                    # => 4232
"number".to_i(36)                 # => 1442151747
"zz1z".to_i(36)                   # => 1678391
"abcdef".to_i(16)                 # => 11259375
"AbCdEf".to_i(16)                 # => 11259375



Convert string to number with non number string

puts "13: a baker"s dozen".to_i                          # => 13
puts "1001 Nights".to_i                                  # => 1001
puts "Night".to_i                                        
puts "Equipment".to_f
puts "$60.50".to_f                                       # => 0.0
puts "AAAA!".hex                                         
puts "0xA2Z".hex                                         # => 162
puts "-10".oct                                           # => -8
puts "-109".oct                                          # => -8
puts "3.14".to_i                                         # => 3



Number parser by regular expressons

class NumberParser
  @@number_regexps = {
    :to_i => /([+-]?[0-9]+)/,
    :to_f => /([+-]?([0-9]*\.)?[0-9]+(e[+-]?[0-9]+)?)/i,
    :oct => /([+-]?[0-7]+)/,
    :hex => /\b([+-]?(0x)?[0-9a-f]+)\b/i
  }
  def NumberParser.re(parsing_method=:to_i)
    re = @@number_regexps[parsing_method]
    raise ArgumentError, "No regexp for #{parsing_method.inspect}!" unless re
    return re
  end
  def extract(s, parsing_method=:to_i)
    numbers = []
    s.scan(NumberParser.re(parsing_method)) do |match|
      numbers << match[0].send(parsing_method)
    end
    numbers
  end
end
p = NumberParser.new
pw = "104 and 391."
NumberParser.re(:to_i).match(pw).captures     
p.extract(pw, :to_i)                          
p.extract("$60.50", :to_f)                    
p.extract("AAA", :hex)
p.extract("017.", :oct)          
p.extract("From 0 to 10e60 AA -2.4 s")



Parsing A Number From A String

"400".to_i                      # => 400



to_i gives the integer version of an object, and to_f gives the float version

var1 = 2
var2 = "5"
puts var1.to_s + var2
puts var1 + var2.to_i