Class: ReadXls::Evaluator::RkNumber

Inherits:
Object
  • Object
show all
Defined in:
lib/read_xls/evaluator/rk_number.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(builder, rk_bits, xf_index) ⇒ RkNumber

Returns a new instance of RkNumber.



6
7
8
9
10
# File 'lib/read_xls/evaluator/rk_number.rb', line 6

def initialize(builder, rk_bits, xf_index)
  self.builder  = builder
  self.rk_bits  = rk_bits
  self.xf_index = xf_index
end

Instance Attribute Details

#builderObject

Returns the value of attribute builder.



4
5
6
# File 'lib/read_xls/evaluator/rk_number.rb', line 4

def builder
  @builder
end

#rk_bitsObject

Returns the value of attribute rk_bits.



4
5
6
# File 'lib/read_xls/evaluator/rk_number.rb', line 4

def rk_bits
  @rk_bits
end

#xf_indexObject

Returns the value of attribute xf_index.



4
5
6
# File 'lib/read_xls/evaluator/rk_number.rb', line 4

def xf_index
  @xf_index
end

Instance Method Details

#evaluateObject



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/read_xls/evaluator/rk_number.rb', line 12

def evaluate
  value = if (rk_bits & 0x02) == 0
            rk_bits_without_last_2            = (rk_bits & 0xfffffffc)
            float_in_64_bit_string_big_endian = (("%032b" % rk_bits_without_last_2) + "0"*32)
            [float_in_64_bit_string_big_endian].pack("B*").unpack("G").first
          else
            rk_bits >> 2
          end

  value = if (rk_bits & 0x01) == 0
            value
          else
            value / 100.0
          end

  FormatNumber.new(value, extended_format).evaluate
end