def abr
      txt = self.to_s.gsub('**','^').tr('*',' ')
      if block_given?
        txt.gsub!(/[+-]?((\d+_?)*\d+(\.(\d+_?)*\d+)?|\.(\d+_?)*\d+)([eE][+-]?(\d+_?)*\d+)?/) do
          v = $&.to_f
          yield v
        end
      end
      txt
    end
def abr
      txt = self.to_s.gsub('**','^').tr('*',' ')
      if block_given?
        txt.gsub!(/[+-]?((\d+_?)*\d+(\.(\d+_?)*\d+)?|\.(\d+_?)*\d+)([eE][+-]?(\d+_?)*\d+)?/) do
          v = $&.to_f
          yield v
        end
      end
      txt
    end
more natural concise text representation
 If a block is passed, it is used to format the numeric magnitudes (Float numbers) (e.g., for localization)
   Units.units{3*m/(2*s)}.abr{|v| v.to_s.tr('.',',') } # => "1,5 m/s"