Class: Floteger
- Inherits:
-
Object
show all
- Includes:
- Comparable
- Defined in:
- lib/floteger.rb
Defined Under Namespace
Classes: RecoverableError
Instance Method Summary
collapse
Constructor Details
#initialize(value = 0, exp = 1) ⇒ Floteger
Returns a new instance of Floteger.
7
8
9
10
|
# File 'lib/floteger.rb', line 7
def initialize(value=0, exp=1)
@value=value.to_i
@exponent=exp.to_i
end
|
Instance Method Details
#**(e) ⇒ Object
def clean!; self = self.clean; end
75
76
77
78
|
# File 'lib/floteger.rb', line 75
def **(e)
@exponent += e
self
end
|
#<=>(f) ⇒ Object
79
|
# File 'lib/floteger.rb', line 79
def <=>(f); self.to_f <=> f; end
|
#clean! ⇒ Object
def round!(dp=1); self = round(dp); end NOT WORKING rounds 42370e-1 to 4238
67
68
69
70
71
72
73
|
# File 'lib/floteger.rb', line 67
def clean! while @value.to_s[-1] == '0'
@value = @value.to_s[0...-1].to_i
@exponent += 1
end
self
end
|
#end_in_five ⇒ Object
57
58
59
60
61
|
# File 'lib/floteger.rb', line 57
def end_in_five
v = @value.to_s
v[-1] = '5'
Floteger.new(v,@exponent)
end
|
#ends_in_five? ⇒ Boolean
62
63
64
|
# File 'lib/floteger.rb', line 62
def ends_in_five?
@value.to_s[-1] == '5'
end
|
#round(direction = :up, dp = 1) ⇒ Object
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# File 'lib/floteger.rb', line 36
def round(direction=:up, dp=1)
dir = case direction
when :up
1
when :down
0
else
raise "Invalid direction #{direction.to_s}"
end
raise RecoverableError, "Cannot round #{self.to_s}" unless sf > 1
v = @value.to_s[0...(-dp)].to_i + dir
e = @exponent + dp
Floteger.new(v, e)
end
|
#round_down ⇒ Object
30
31
32
33
34
35
|
# File 'lib/floteger.rb', line 30
def round_down
raise "Cannot round #{self.to_s}" unless sf > 1
v = @value.to_s[0...-1]
e = @exponent + 1
Floteger.new(v, e)
end
|
#round_if_possible(direction = :up, dp = 1) ⇒ Object
50
51
52
53
54
55
56
|
# File 'lib/floteger.rb', line 50
def round_if_possible(direction=:up, dp=1)
begin
round(direction, dp)
rescue RecoverableError
return self
end
end
|
#to_f ⇒ Object
11
12
13
|
# File 'lib/floteger.rb', line 11
def to_f
@value.to_f * 10 ** @exponent
end
|
#to_s ⇒ Object
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# File 'lib/floteger.rb', line 14
def to_s
s = @value.to_s
case
when @exponent == 0
when @exponent > 0
s += '0' * @exponent
when (@exponent < 0 and s.length > inv_exp)
split = s.length + @exponent
s = s[0..(split-1)] + '.' + s[split..-1]
else
s = '0.' + '0' * (inv_exp - s.length) + s
end
s
end
|