class Pulo::NumberToRoundedConverter
Public Class Methods
convert(number, precision)
click to toggle source
# File lib/pulo/formatting.rb, line 53 def self.convert(number, precision) precision ||= Pulo.precision if Pulo.significant_figures && precision > 0 digits, rounded_number = digits_and_rounded_number(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 = "%00.#{precision}f" % rounded_number delimited_number = NumberToDelimitedConverter.convert(formatted_string) format_number(delimited_number) end
Private Class Methods
absolute_number(number)
click to toggle source
# File lib/pulo/formatting.rb, line 99 def self.absolute_number(number) number.respond_to?(:abs) ? number.abs : number.to_d.abs end
calculate_rounded_number(number,multiplier)
click to toggle source
# File lib/pulo/formatting.rb, line 86 def self.calculate_rounded_number(number,multiplier) (number / BigDecimal.new(multiplier.to_f.to_s)).round * multiplier end
digit_count(number)
click to toggle source
# File lib/pulo/formatting.rb, line 90 def self.digit_count(number) number.zero? ? 1 : (Math.log10(absolute_number(number)) + 1).floor end
digits_and_rounded_number(number,precision)
click to toggle source
# File lib/pulo/formatting.rb, line 74 def self.digits_and_rounded_number(number,precision) if zero?(number) [1, 0] else digits = digit_count(number) multiplier = 10 ** (digits - precision) rounded_number = calculate_rounded_number(number,multiplier) digits = digit_count(rounded_number) # After rounding, the number of digits may have changed [digits, rounded_number] end end
format_number(number)
click to toggle source
# File lib/pulo/formatting.rb, line 94 def self.format_number(number) escaped_separator = Regexp.escape('.') number.sub(/(#{escaped_separator})(\d*[1-9])?0+\z/, '\1\2').sub(/#{escaped_separator}\z/, '') end
zero?(number)
click to toggle source
# File lib/pulo/formatting.rb, line 103 def self.zero?(number) number.respond_to?(:zero?) ? number.zero? : number.to_d.zero? end