arnesi

Converting to and from external representations 

(defvar *precision* 2
  "Default precision.")
(defmacro with-precision (prec &body body)
  "Evalute BODY with *precision* bound to @var{prec}."
  (let ((precision (gensym)))[...]
    `(let ((,precision ,prec))
       (assert (integerp ,precision)
	       (,precision)
	       "Precision must be an integer, not ~S" ,precision)
       (let ((*precision* (10^ ,precision)))
	 (declare (special *precision*))
	 ,@body))))
(defun decimal-from-float (float &optional (precision *precision*) (rounding-method #'round-half-up))
  "Convert @var{float} to an exact value with precision
  @var{precision} using @var{rounding-method} to do any
  neccessary rounding."
  (funcall rounding-method float precision))
(defun float-from-decimal (decimal)
  "Convert the exact decimal value @var{decimal} to a (not
  neccassily equal) floating point value."
  (float decimal))