Function: math-convert-units

math-convert-units is an autoloaded and byte-compiled function defined in calc-units.el.gz.

Signature

(math-convert-units EXPR NEW-UNITS &optional PURE)

Source Code

;; Defined in /usr/src/emacs/lisp/calc/calc-units.el.gz
(defun math-convert-units (expr new-units &optional pure)
  (if (eq (car-safe new-units) 'var)
      (let ((unew (assq (nth 1 new-units)
                        (math-build-units-table))))
        (if (eq (car-safe (nth 1 unew)) '+)
            (setq new-units (nth 1 unew)))))
  (math-with-extra-prec 2
    (let ((compat (and (not pure)
                       (math-find-compatible-unit expr new-units)))
	  (math-cu-unit-list nil)
	  (math-combining-units nil))
      (if compat
	  (math-simplify-units
	   (math-mul (math-mul (math-simplify-units
				(math-div expr (math-pow (car compat)
							 (cdr compat))))
			       (math-pow new-units (cdr compat)))
		     (math-simplify-units
		      (math-to-standard-units
		       (math-pow (math-div (car compat) new-units)
				 (cdr compat))
		       nil))))
	(when (setq math-cu-unit-list (math-decompose-units new-units))
	  (setq new-units (nth 2 (car math-cu-unit-list))))
	(when (eq (car-safe expr) '+)
	  (setq expr (math-simplify-units expr)))
	(if (math-units-in-expr-p expr t)
            (let ((math-cu-new-units new-units)
                  (math-cu-pure pure))
	      (math-convert-units-rec expr))
	  (math-apply-units (math-to-standard-units
			     (list '/ expr new-units) nil)
			    new-units math-cu-unit-list pure))))))