Class: ActiveSupport::NumberHelper::NumberToRoundedConverter
- Inherits:
-
NumberConverter
- Object
- NumberConverter
- ActiveSupport::NumberHelper::NumberToRoundedConverter
- Defined in:
- 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 42 43 44 45 46 |
# File 'lib/active_support/number_helper/number_to_rounded_converter.rb', line 7 def convert precision = .delete :precision if precision 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 .delete(: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.finite? 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') s << '0'.freeze * precision a, b = s.split('.'.freeze, 2) a << '.'.freeze a << b[0, precision] else "%00.#{precision}f" % rounded_number end else formatted_string = number end delimited_number = NumberToDelimitedConverter.convert(formatted_string, ) format_number(delimited_number) end |