code: protected DecimalWithUoM eval(final Object... _values)
          throws SQLException
      {
          final DecimalWithUoM ret;
  
          if (_values == null || _values.length < 2)  {
              ret = null;
          } else  {
              final BigDecimal value;
              if (_values[0] instanceof String && ((String) _values[0]).length() > 0) {
                  try {
                      value = DecimalType.parseLocalized((String) _values[0]);
                  } catch (final EFapsException e) {
                      throw new SQLException(e);
                  }
              } else if (_values[0] instanceof BigDecimal) {
                  value = (BigDecimal) _values[0];
              } else if (_values[0] instanceof Number) {
                  value = new BigDecimal(((Number) _values[0]).toString());
              } else  {
                  value = null;
              }
  
              final UoM uom;
              if (_values[1] instanceof UoM) {
                  uom = (UoM) _values[1];
              } else if (_values[1] instanceof String && ((String) _values[1]).length() > 0) {
                  uom = Dimension.getUoM(Long.parseLong((String) _values[1]));
              } else if (_values[1] instanceof Number) {
                  uom = Dimension.getUoM(((Number) _values[1]).longValue());
              } else  {
                  uom = null;
              }
              ret = new DecimalWithUoM(value, uom);
          }
          return ret;
      }
docs: The localized string and the internal string value are equal. So the
  internal value can be evaluated directly.
  
  @param _values   values to evaluate
  @return evaluated big decimal value with unit of measure
  @throws SQLException on error