Class: Floteger

Inherits:
Object
  • 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! # deals with @value ending in 0
  while @value.to_s[-1] == '0'
    @value = @value.to_s[0...-1].to_i
    @exponent += 1
  end
  self
end

#end_in_fiveObject



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

Returns:

  • (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

Raises:



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_downObject



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_fObject



11
12
13
# File 'lib/floteger.rb', line 11

def to_f
  @value.to_f * 10 ** @exponent
end

#to_sObject



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]
  #when @exponent < 0 and s.length > (0 - @exponent)
  else
    # pad front with zeros
    s = '0.' + '0' * (inv_exp - s.length)  + s
  end
  s      
end