Class: ActiveSupport::NumberHelper::NumberToRoundedConverter
- Inherits:
-
NumberConverter
- Object
- NumberConverter
- ActiveSupport::NumberHelper::NumberToRoundedConverter
- Defined in:
- activesupport/lib/active_support/number_helper/number_to_rounded_converter.rb
Overview
:nodoc:
Constant Summary
Constants inherited from NumberConverter
ActiveSupport::NumberHelper::NumberConverter::DEFAULTS
Instance Attribute Summary
Attributes inherited from NumberConverter
Instance Method Summary collapse
Methods inherited from NumberConverter
convert, #execute, #initialize
Constructor Details
This class inherits a constructor from ActiveSupport::NumberHelper::NumberConverter
Instance Method Details
#convert ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'activesupport/lib/active_support/number_helper/number_to_rounded_converter.rb', line 7 def convert precision = .delete :precision significant = .delete :significant case number when Float, String @number = BigDecimal(number.to_s) when Rational @number = BigDecimal(number, digit_count(number.to_i) + precision) else @number = number.to_d end if significant && precision > 0 digits, rounded_number = digits_and_rounded_number(precision) precision -= digits precision = 0 if precision < 0 # don't let it be negative else rounded_number = number.round(precision) rounded_number = rounded_number.to_i if precision == 0 rounded_number = rounded_number.abs if rounded_number.zero? # prevent showing negative zeros end formatted_string = if BigDecimal === rounded_number && rounded_number.finite? s = rounded_number.to_s('F') + '0'*precision a, b = s.split('.', 2) a + '.' + b[0, precision] else "%01.#{precision}f" % rounded_number end delimited_number = NumberToDelimitedConverter.convert(formatted_string, ) format_number(delimited_number) end |