class MeasureScaler::Measure

Attributes

precision[R]
qty[R]
unit[R]

Public Class Methods

new(qty, unit, precision=nil) click to toggle source

Measure.new(12500.34, “MWh”)

# File lib/measure_scaler/measure.rb, line 6
def initialize(qty, unit, precision=nil)
  @qty, @precision = qty, precision
  @unit            = unit.is_a?(Unit) ? unit : Unit.new(unit)
end

Public Instance Methods

scale() click to toggle source
# File lib/measure_scaler/measure.rb, line 11
def scale
  # TODO: gestisci unità non riconosciute (non valide)


  if @unit.pattern_found?
    ord = @qty.scaling_proposal # multipli di 3
    ord, new_unit = @unit.scale(ord)
    qty = @qty.scale(ord)
    qty = precisize(qty) if @precision
    Measure.new(qty, new_unit, @precision)
  else
    @qty = precisize(@qty) if @precision
    self
  end
end
to_s() click to toggle source
# File lib/measure_scaler/measure.rb, line 27
def to_s
  "#{@qty} #{@unit}"
end

Private Instance Methods

precisize(arg) click to toggle source

arg is an array or a numeric value

# File lib/measure_scaler/measure.rb, line 35
def precisize(arg)
  if arg.is_a? Array
    arg.map{|e| precisize_num(e)}
  else
    precisize_num(arg)
  end
end
precisize_num(num) click to toggle source
# File lib/measure_scaler/measure.rb, line 43
def precisize_num(num)
  lg = Math.log10(num.to_f).ceil
  (num.to_f*10**(@precision-lg)).round/(10.0**(@precision-lg))
end