Ruby on rails 如何将字符串转换为整数而不使用ruby';到i';方法

Ruby on rails 如何将字符串转换为整数而不使用ruby';到i';方法,ruby-on-rails,ruby,Ruby On Rails,Ruby,我想将给定字符串转换为整数,而不使用rubyto_I方法 基本上,我想知道我是如何实现的,或者最好的方法是什么。 例如: 提前感谢您可以通过以下方式完成此操作 2.1.0 :031 > str = "12345" => "12345" 2.1.0 :032 > Integer(str) rescue 0 => 12345 str = "123" num = Integer(str) rescue 0 # will give you 123 num = str

我想将给定字符串转换为整数,而不使用ruby
to_I
方法

基本上,我想知道我是如何实现的,或者最好的方法是什么。 例如:


提前感谢

您可以通过以下方式完成此操作

2.1.0 :031 > str = "12345"
 => "12345" 
2.1.0 :032 > Integer(str) rescue 0
 => 12345 
str = "123"
num = Integer(str) rescue 0   # will give you 123
num = str.to_i                # will give you 123

str = "123a"
num = Integer(str) rescue 0   # will give you 0 - will throw ArgumentError in case no rescue
num = str.to_i                # will give you 123

您可以通过以下方式完成此操作

2.1.0 :031 > str = "12345"
 => "12345" 
2.1.0 :032 > Integer(str) rescue 0
 => 12345 
str = "123"
num = Integer(str) rescue 0   # will give you 123
num = str.to_i                # will give you 123

str = "123a"
num = Integer(str) rescue 0   # will give you 0 - will throw ArgumentError in case no rescue
num = str.to_i                # will give you 123

要知道什么是主要的区别是整数将抛出一个异常,如果它不是一个有效的整数,但对于_,我将尝试转换尽可能多的整数,你可以拯救整数,如果它不是一个有效的整数,如下所示

2.1.0 :031 > str = "12345"
 => "12345" 
2.1.0 :032 > Integer(str) rescue 0
 => 12345 
str = "123"
num = Integer(str) rescue 0   # will give you 123
num = str.to_i                # will give you 123

str = "123a"
num = Integer(str) rescue 0   # will give you 0 - will throw ArgumentError in case no rescue
num = str.to_i                # will give you 123

要知道什么是主要的区别是整数将抛出一个异常,如果它不是一个有效的整数,但对于_,我将尝试转换尽可能多的整数,你可以拯救整数,如果它不是一个有效的整数,如下所示

2.1.0 :031 > str = "12345"
 => "12345" 
2.1.0 :032 > Integer(str) rescue 0
 => 12345 
str = "123"
num = Integer(str) rescue 0   # will give you 123
num = str.to_i                # will give you 123

str = "123a"
num = Integer(str) rescue 0   # will give you 0 - will throw ArgumentError in case no rescue
num = str.to_i                # will give you 123

在C中使用此方法时,它可能会帮助您了解:

def too_i(number)
  return 0 if (lead = number[/^\d+/]).nil?
  lead.bytes.reduce(0) do |acc, chaar|
    # 48 is the byte code for character '0'.
    acc*10 + chaar - 48 
  end
end
too_i '123'
# => 123
too_i '123lol123'
# => 123
too_i 'abc123'
# => 0
too_i 'abcd'
# => 0

在C中使用此方法时,它可能会帮助您了解:

def too_i(number)
  return 0 if (lead = number[/^\d+/]).nil?
  lead.bytes.reduce(0) do |acc, chaar|
    # 48 is the byte code for character '0'.
    acc*10 + chaar - 48 
  end
end
too_i '123'
# => 123
too_i '123lol123'
# => 123
too_i 'abc123'
# => 0
too_i 'abcd'
# => 0

您可以在此处找到源代码:
Integer(a.delete(“^0-9”))rescue 0
…将
发送到i
有什么问题?您可以在此处找到源代码:
Integer(a.delete(“^0-9”))rescue 0
…将
发送到i
有什么问题?当我在'str'-arguments'中传递字符时会引发错误错误错误错误错误:整数的值无效:“1234abcd”>它将给出一个错误。因此,最好使用to_i,它不会给出错误,即使它不是有效的整数。当我在'str'中传递字符时,它会抛出错误。ArgumentError:invalid value for Integer:“1234abcd”>它会给出一个ArgumentError。因此,最好使用to#i,它不会给出错误,即使它不是一个有效的整数最佳答案,因为它最接近于问题的目的:在不使用to#i的情况下转换为整数(
integer(str)
与IMO没有多大区别)。这样,您至少可以了解到ascii图表上的数字从48(零)开始,要转换为整数,您可以通过
#bytes
获得ascii值,然后减去48,这是最好的答案,因为它最接近问题所要做的:不使用
#to_i
整数(str))转换为整数
与imo没有太大区别)。这样,您至少可以了解ascii图表上的数字从48(零)开始,要转换为整数,您可以通过
#bytes
获得ascii值并减去48