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]}")