Skip to content

Instantly share code, notes, and snippets.

@clemens
Created August 18, 2008 13:28
Show Gist options
  • Save clemens/5964 to your computer and use it in GitHub Desktop.
Save clemens/5964 to your computer and use it in GitHub Desktop.
# with :show_sign option and extended :format
def number_to_currency(number, options = {})
options.symbolize_keys!
defaults = I18n.translate(:'number.format', :locale => options[:locale], :raise => true) rescue {}
currency = I18n.translate(:'number.currency.format', :locale => options[:locale], :raise => true) rescue {}
defaults = defaults.merge(currency)
precision = options[:precision] || defaults[:precision]
unit = options[:unit] || defaults[:unit]
separator = options[:separator] || defaults[:separator]
delimiter = options[:delimiter] || defaults[:delimiter]
format = options[:format] || defaults[:format]
show_sign = options[:show_sign] || defaults[:show_sign]
separator = '' if precision == 0
sign = number < 0 ? '-' : '+'
sign = '' if (number < 0 && show_sign == :positive) || (number > 0 && show_sign == :negative)
begin
format.gsub(/%n/, number_with_precision(number.abs,
:precision => precision,
:delimiter => delimiter,
:separator => separator)
).gsub(/%u/, unit).gsub(/%s/, sign)
rescue
number
end
end
# with :zero_sign option
def number_to_currency(number, options = {})
options.symbolize_keys!
defaults = I18n.translate(:'number.format', :locale => options[:locale], :raise => true) rescue {}
currency = I18n.translate(:'number.currency.format', :locale => options[:locale], :raise => true) rescue {}
defaults = defaults.merge(currency)
precision = options[:precision] || defaults[:precision]
unit = options[:unit] || defaults[:unit]
separator = options[:separator] || defaults[:separator]
delimiter = options[:delimiter] || defaults[:delimiter]
format = options[:format] || defaults[:format]
show_sign = options[:show_sign] || defaults[:show_sign]
zero_sign = options[:zero_sign] || defaults[:zero_sign]
separator = '' if precision == 0
sign = number == 0 ? zero_sign : (number < 0 ? '-' : '+')
sign = '' if (number < 0 && show_sign == :positive) || (number > 0 && show_sign == :negative)
begin
format.gsub(/%n/, number_with_precision(number.abs,
:precision => precision,
:delimiter => delimiter,
:separator => separator)
).gsub(/%u/, unit).gsub(/%s/, sign)
rescue
number
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment