Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 基于字符数拆分Ruby on Rails上的字符串_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 基于字符数拆分Ruby on Rails上的字符串

Ruby on rails 基于字符数拆分Ruby on Rails上的字符串,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我想把这些数字分开 a = 900000 b = 1800000 c = 5000 进入这些 a[0]=900 a[1]=000 b[0]=1800 b[1]=000 c[0]=5 c[1]=000 我如何才能做到这一点?使用with range: a = 1800000 [a.to_s[0...-3], a.to_s[-3..-1]] # => ["1800", "000"] 使用 使用正则表达式: a.to_s.match(/(.*)(.{3})$/).captures #

我想把这些数字分开

a = 900000 
b = 1800000 
c = 5000 
进入这些

a[0]=900

a[1]=000

b[0]=1800

b[1]=000

c[0]=5

c[1]=000

我如何才能做到这一点?

使用with range:

a = 1800000 
[a.to_s[0...-3], a.to_s[-3..-1]]
# => ["1800", "000"]
使用

使用正则表达式:

a.to_s.match(/(.*)(.{3})$/).captures
# => ["1800", "000"]


以下是rails NumberHelper的number_with_delimiter方法的源代码

# File actionpack/lib/action_view/helpers/number_helper.rb, line 263
def number_with_delimiter(number, options = {})
  options.symbolize_keys!

  options[:delimiter] = ERB::Util.html_escape(options[:delimiter]) if options[:delimiter]
  options[:separator] = ERB::Util.html_escape(options[:separator]) if options[:separator]

  begin
    Float(number)
  rescue ArgumentError, TypeError
    if options[:raise]
      raise InvalidNumberError, number
    else
      return number
    end
  end

  defaults = I18n.translate(:'number.format', :locale => options[:locale], :default => {})
  options = options.reverse_merge(defaults)

  parts = number.to_s.to_str.split('.')
  parts[0].gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{options[:delimiter]}")
  parts.join(options[:separator]).html_safe
end
我想你要找的代码就是这个

parts[0].gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{options[:delimiter]}")

这个问题似乎意味着它想把尾随的零分成3组。第一个和第三个方法将拆分任何数字?@rickypai,所有(包括第二个)将拆分任何数字。@rickypai,如果OP想要拆分尾随的零,OP可以使用第三个稍微修改的方法:
a.to_.match(/(.*)(000)$/)。捕获
Wow,至少三个方法+如果可以的话为什么1800不能分成1和800?
b.to_s.chars.last(3).join
# File actionpack/lib/action_view/helpers/number_helper.rb, line 263
def number_with_delimiter(number, options = {})
  options.symbolize_keys!

  options[:delimiter] = ERB::Util.html_escape(options[:delimiter]) if options[:delimiter]
  options[:separator] = ERB::Util.html_escape(options[:separator]) if options[:separator]

  begin
    Float(number)
  rescue ArgumentError, TypeError
    if options[:raise]
      raise InvalidNumberError, number
    else
      return number
    end
  end

  defaults = I18n.translate(:'number.format', :locale => options[:locale], :default => {})
  options = options.reverse_merge(defaults)

  parts = number.to_s.to_str.split('.')
  parts[0].gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{options[:delimiter]}")
  parts.join(options[:separator]).html_safe
end
parts[0].gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{options[:delimiter]}")