Skip to content

Commit e20012b

Browse files
committed
Make number_to_human and number_with_precision work with negatives
1 parent d717ff9 commit e20012b

File tree

2 files changed

+4
-2
lines changed

2 files changed

+4
-2
lines changed

actionpack/lib/action_view/helpers/number_helper.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ def number_with_precision(number, options = {})
260260
if number == 0
261261
digits, rounded_number = 1, 0
262262
else
263-
digits = (Math.log10(number) + 1).floor
263+
digits = (Math.log10(number.abs) + 1).floor
264264
rounded_number = BigDecimal.new((number / 10 ** (digits - precision)).to_s).round.to_f * 10 ** (digits - precision)
265265
end
266266
precision = precision - digits
@@ -459,7 +459,7 @@ def number_to_human(number, options = {})
459459
raise ArgumentError, ":units must be a Hash or String translation scope."
460460
end.keys.map{|e_name| DECIMAL_UNITS.invert[e_name] }.sort_by{|e| -e}
461461

462-
number_exponent = number != 0 ? Math.log10(number).floor : 0
462+
number_exponent = number != 0 ? Math.log10(number.abs).floor : 0
463463
display_exponent = unit_exponents.find{|e| number_exponent >= e }
464464
number /= 10 ** display_exponent
465465

actionpack/test/template/number_helper_test.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ def test_number_with_delimiter_with_options_hash
8383
end
8484

8585
def test_number_with_precision
86+
assert_equal("-111.235", number_with_precision(-111.2346))
8687
assert_equal("111.235", number_with_precision(111.2346))
8788
assert_equal("31.83", number_with_precision(31.825, :precision => 2))
8889
assert_equal("111.23", number_with_precision(111.2346, :precision => 2))
@@ -184,6 +185,7 @@ def test_number_to_human_size_with_custom_delimiter_and_separator
184185
end
185186

186187
def test_number_to_human
188+
assert_equal '-123', number_to_human(-123)
187189
assert_equal '0', number_to_human(0)
188190
assert_equal '123', number_to_human(123)
189191
assert_equal '1.23 Thousand', number_to_human(1234)

0 commit comments

Comments
 (0)