   multiplyDivied: (other, operator) ->
     if other instanceof Quantity
       if @unit and other.unit
-        can_val = ucum.parse(ucum_unit(@unit)) # ucum.canonicalize(@value,ucum_unit(@unit))
-        can_val.value = @value
-        other_can_value = ucum.parse(ucum_unit(other.unit)) #ucum.canonicalize(other.value,ucum_unit(other.unit))
-        other_can_value.value = other.value
+        can_val = @to_ucum() # ucum.canonicalize(@value,ucum_unit(@unit))
+        other_can_value = other.to_ucum()#ucum.canonicalize(other.value,ucum_unit(other.unit))
         ucum_value = ucum_multiply(can_val,[[operator,other_can_value]])
         createQuantity(ucum_value.value, units_to_string(ucum_value.units))
       else
         value = if operator == "/" then @value / other.value  else @value * other.value
         unit = @unit || other.unit
-        createQuantity(value, unit)
+        createQuantity(decimalAdjust("round",value,-8), unit)
     else
       value = if operator == "/" then @value / other  else @value * other
-      createQuantity( value, @unit)
+      createQuantity( decimalAdjust("round",value,-8), @unit)
+
+  to_ucum: ->
+    u = ucum.parse(ucum_unit(@unit)) # ucum.canonicalize(@value,ucum_unit(@unit))
+    u.value *= @value
+    u
 
 
 time_unit_to_ucum = {'year' : 'a', 'month' : 'mo',  'day' : 'd' , 'hour' : 'h', 'minute' : 'min' , 'second': 's' , 'millisecond' :  'ms', 'week' : 'wk', 'weeks' : 'wk' }


  equals: (other) ->
    if other instanceof Quantity
      other_v = ucum.convert(other.value,ucum_unit(other.unit),ucum_unit(@unit))
      @value == other_v

  dividedBy: (other) ->
    @multiplyDivied(other,"/")

  # first strip off any pluraizations then attempt to perform a time unit to ucum unit mapping
  # otherwise send back the original value
  u = time_unit_dateTime_mapping[unit] || unit
  time_unit_to_ucum[u] ||  u || ''



