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
47
|
# File 'lib/tins/round.rb', line 19
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 result
end
|