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