Ticket #8172: number_to_currency_fix_for_negative_numbers.diff
| File number_to_currency_fix_for_negative_numbers.diff, 3.0 kB (added by bgreenlee, 1 year ago) |
|---|
-
actionpack/test/template/number_helper_test.rb
old new 20 20 21 21 def test_number_to_currency 22 22 assert_equal("$1,234,567,890.50", number_to_currency(1234567890.50)) 23 assert_equal("-$1,234,567,890.50", number_to_currency(-1234567890.50)) 23 24 assert_equal("$1,234,567,890.51", number_to_currency(1234567890.506)) 24 25 assert_equal("$1,234,567,892", number_to_currency(1234567891.50, {:precision => 0})) 25 26 assert_equal("$1,234,567,890.5", number_to_currency(1234567890.50, {:precision => 1})) 26 27 assert_equal("£1234567890,50", number_to_currency(1234567890.50, {:unit => "£", :separator => ",", :delimiter => ""})) 28 assert_equal("(£1234567890,50)", number_to_currency(-1234567890.50, {:unit => "£", :separator => ",", :delimiter => "", :negative_parens => true})) 27 29 assert_equal("$1,234,567,890.50", number_to_currency("1234567890.50")) 30 assert_equal("-$1,234,567,890.50", number_to_currency("-1234567890.50")) 31 assert_equal("-$0.12", number_to_currency(-0.12)) 32 assert_equal("-$0.12", number_to_currency("-0.12")) 33 assert_equal("$0.12", number_to_currency(0.12)) 28 34 assert_equal("$x.", number_to_currency("x")) 29 35 assert_nil number_to_currency(nil) 30 36 end -
actionpack/lib/action_view/helpers/number_helper.rb
old new 46 46 # * <tt>:unit</tt> - Sets the denomination of the currency, defaults to "$" 47 47 # * <tt>:separator</tt> - Sets the separator between the units, defaults to "." 48 48 # * <tt>:delimiter</tt> - Sets the thousands delimiter, defaults to "," 49 # * <tt>:negative_parens</tt> - Adds parentheses around negative numbers, defaults to false 49 50 # 50 51 # number_to_currency(1234567890.50) => $1,234,567,890.50 51 52 # number_to_currency(1234567890.506) => $1,234,567,890.51 … … 58 59 unit = options["unit"] || "$" 59 60 separator = precision > 0 ? options["separator"] || "." : "" 60 61 delimiter = options["delimiter"] || "," 62 negative_parens = options["negative_parens"] 61 63 62 64 begin 63 65 parts = number_with_precision(number, precision).split('.') 64 unit + number_with_delimiter(parts[0], delimiter) + separator + parts[1].to_s 66 parts[0].sub!(/^-/,'') # remove minus sign (can't do number.abs because number may be a string) 67 number_str = unit + number_with_delimiter(parts[0], delimiter) + separator + parts[1].to_s 68 if number.to_f < 0 69 options["negative_parens"] ? "(#{number_str})" : "-#{number_str}" 70 else 71 number_str 72 end 65 73 rescue 66 74 number 67 75 end