Module: FatCore::Numeric
- Included in:
- Numeric
- Defined in:
- lib/fat_core/numeric.rb
Instance Method Summary collapse
-
#commas(places = nil) ⇒ String
Convert this number into a string and insert grouping commas into the whole number part and round the decimal part to
placesdecimal places, with the default number of places being zero for an integer and 4 for a non-integer. -
#group(places = nil, delim = ',') ⇒ String
Convert this number into a string and insert grouping delimiter character,
deliminto the whole number part and round the decimal part toplacesdecimal places, with the default number of places being zero for an integer and 4 for a non-integer. -
#int_if_whole ⇒ Numeric, Integer
Return an Integer type, but only if the fractional part of self is zero; otherwise just return self.
-
#secs_to_hms ⇒ String
Convert self, regarded as a number of seconds, into a string of the form HH:MM:SS.dd, that is to hours, minutes and seconds and fractions of seconds.
-
#signum ⇒ Integer
Return the signum function for this number, i.e., 1 for a positive number, 0 for zero, and -1 for a negative number.
-
#tex_quote ⇒ Object
Quote self for use in TeX documents.
-
#whole? ⇒ Boolean
Return whether this is a whole number.
Instance Method Details
#commas(places = nil) ⇒ String
Convert this number into a string and insert grouping commas into the
whole number part and round the decimal part to places decimal places,
with the default number of places being zero for an integer and 4 for a
non-integer. The fractional part is padded with zeroes on the right to
come out to places digits after the decimal place.
37 38 39 |
# File 'lib/fat_core/numeric.rb', line 37 def commas(places = nil) group(places, ',') end |
#group(places = nil, delim = ',') ⇒ String
Convert this number into a string and insert grouping delimiter character,
delim into the whole number part and round the decimal part to places
decimal places, with the default number of places being zero for an
integer and 4 for a non-integer. The fractional part is padded with zeroes
on the right to come out to places digits after the decimal place. This
is the same as #commas, but allows the delimiter to be any string.
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/fat_core/numeric.rb', line 58 def group(places = nil, delim = ',') # Return number as a string with embedded commas # for nice printing; round to places places after # the decimal # Only convert to string numbers with exponent unless they are # less than 1 (to ensure that really small numbers round to 0.0) return to_s if abs > 1.0 && to_s =~ /e/ # Round if places given str = if places.nil? whole? ? to_i.to_s : to_f.to_s else to_f.round(places).to_s end # Break the number into parts; underscores are possible in all components. str =~ /\A([-+])?([\d_]*)((\.)?([\d_]*))?([eE][+-]?[\d_]+)?\z/ sig = $1 || '' whole = $2 ? $2.delete('_') : '' frac = $5 || '' exp = $6 || '' # Pad out the fractional part with zeroes to the right unless places.nil? n_zeroes = [places - frac.length, 0].max frac += '0' * n_zeroes if n_zeroes.positive? end # Place the commas in the whole part only whole = whole.reverse whole.gsub!(/([0-9]{3})/, "\\1#{delim}") whole.gsub!(/#{Regexp.escape(delim)}$/, '') whole.reverse! if frac.blank? # || places <= 0 sig + whole + exp else sig + whole + '.' + frac + exp end end |
#int_if_whole ⇒ Numeric, Integer
Return an Integer type, but only if the fractional part of self is zero; otherwise just return self.
119 120 121 |
# File 'lib/fat_core/numeric.rb', line 119 def int_if_whole whole? ? floor : self end |
#secs_to_hms ⇒ String
Convert self, regarded as a number of seconds, into a string of the form HH:MM:SS.dd, that is to hours, minutes and seconds and fractions of seconds.
130 131 132 133 134 135 136 137 138 139 |
# File 'lib/fat_core/numeric.rb', line 130 def secs_to_hms frac = self % 1 mins, secs = divmod(60) hrs, mins = mins.divmod(60) if frac.round(5) > 0.0 '%02d:%02d:%02d.%d' % [hrs, mins, secs, frac.round(5) * 100] else '%02d:%02d:%02d' % [hrs, mins, secs] end end |
#signum ⇒ Integer
Return the signum function for this number, i.e., 1 for a positive number, 0 for zero, and -1 for a negative number.
14 15 16 17 18 19 20 21 22 |
# File 'lib/fat_core/numeric.rb', line 14 def signum if positive? 1 elsif negative? -1 else 0 end end |
#tex_quote ⇒ Object
Quote self for use in TeX documents. Since number components are not
special to TeX, this just applies #to_s
143 144 145 |
# File 'lib/fat_core/numeric.rb', line 143 def tex_quote to_s end |
#whole? ⇒ Boolean
Return whether this is a whole number.
107 108 109 |
# File 'lib/fat_core/numeric.rb', line 107 def whole? floor == self end |