The
the result of runding the result of number divided by divisor | ||
the remainder of the round operation |
(defun cl:round (number &optional (divisor (if (integerp number) 1 1.0) divisor-p)) (let* ((x (/ (float number) divisor)) (quotient (cond ((and (not divisor-p) (integerp number)) number) ((= number divisor) 1) ((plusp x) (truncate (+ x 0.5))) ((= (- x 0.5) (truncate (- x 0.5))) (if (minusp x) (1- (truncate x)) (truncate x))) (t (truncate (- x 0.5)))))) (setq *rslt* (list quotient (- number (* quotient divisor))) cl:*multiple-values* t) quotient))
The
The quotient is directly returned by the function, while a list:
(quotient remainder)
is stored in the Nyquist/XLISP *rslt* variable and the cl:*multiple-values* is set to T to signal that Multiple Values are returned.
Examples:
(round 3.5) => 4 (round -3.5) => -3 (cl:round 3.5) => 4 ; *rslt* = ( 4 -0.5) (cl:round -3.5) => -4 ; *rslt* = (-4 0.5)