method
convert
v4.2.9 -
Show latest stable
- Class:
ActiveSupport::NumberHelper::NumberToRoundedConverter
convert()public
No documentation available.
# File activesupport/lib/active_support/number_helper/number_to_rounded_converter.rb, line 7
def convert
precision = options.delete :precision
significant = options.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.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') + '0'*precision
a, b = s.split('.', 2)
a + '.' + b[0, precision]
else
"%00.#{precision}f" % rounded_number
end
delimited_number = NumberToDelimitedConverter.convert(formatted_string, options)
format_number(delimited_number)
end