Sha256: cf87dcad5babd4035fddcfbf9c8d57265ff969233a033c4a74e78b3ad0e73335

Contents?: true

Size: 1.21 KB

Versions: 53

Compression:

Stored size: 1.21 KB

Contents

module Tins
  # A bit more versatile rounding for Ruby
  module Round
    def self.included(klass)
      if klass.instance_method(:round)
        klass.class_eval do
          begin
            alias_method :__old_round__, :round
            remove_method :round
          rescue NameError
          end
        end
        super
      else
        raise NoMethodError, 'no round method found'
      end
    end

    def round(places = nil)
      if places == nil || places == 0
        return __old_round__
      elsif places.respond_to?(:to_int)
        places = places.to_int
      else
        raise TypeError, "argument places has to be like an Integer"
      end
      if places < 0
        max_places = -Math.log(self.abs + 1) / Math.log(10)
        raise ArgumentError, "places has to be >= #{max_places.ceil}" if max_places > places
      end
      t = self
      f = 10.0 ** places
      t *= f
      if t.infinite?
        result = self
      else
        if t >= 0.0
          t = (t + 0.5).floor
        elsif t < 0.0
          t = (t - 0.5).ceil
        end
        t /= f
        result = t.nan? ? self : t
      end
      max_places and result = result.to_i # if places < 0
      result
    end
  end
end

require 'tins/alias'

Version data entries

53 entries across 52 versions & 3 rubygems

Version Path
tdiary-5.1.2 vendor/bundle/ruby/2.6.0/gems/tins-0.13.2/lib/tins/round.rb
tdiary-5.1.1 vendor/bundle/ruby/2.6.0/gems/tins-0.13.2/lib/tins/round.rb
tdiary-5.0.8 vendor/bundle/ruby/2.5.0/gems/tins-0.13.2/lib/tins/round.rb
tdiary-5.0.8 vendor/bundle/gems/tins-0.13.2/lib/tins/round.rb
tins-1.3.0 lib/tins/round.rb
tins-1.2.0 lib/tins/round.rb
tins-1.1.0 lib/tins/round.rb
tins-1.0.1 lib/tins/round.rb
tins-1.0.0 lib/tins/round.rb
tins-0.13.2 lib/tins/round.rb
social_url_stats-0.0.1 vendor/ruby/1.9.1/gems/tins-0.13.1/lib/tins/round.rb
tins-0.13.1 lib/tins/round.rb
tins-0.13.0 lib/tins/round.rb
tins-0.12.0 lib/tins/round.rb
tins-0.11.0 lib/tins/round.rb
tins-0.10.0 lib/tins/round.rb
tins-0.9.0 lib/tins/round.rb
tins-0.8.4 lib/tins/round.rb
tins-0.8.3 lib/tins/round.rb
tins-0.8.2 lib/tins/round.rb