msirois 发表于 2022-7-5 18:05:24

我如何将数字归集到整数

我需要在我的LISP例程中总是把一个数字四舍五入。fix命令似乎只是四舍五入。
 
我需要所有带有任意小数点的数字总是向上取整到下一个偶数。例如:
4.1-四舍五入至5
5.8-四舍五入到6
3.00000000000001-四舍五入到4
2.00-保持不变;不归位。
 
我怎样才能轻松做到这一点?
提前感谢您的帮助。
 
如果需要,请提供更多信息:
 
我在做一个楼梯Lisp程序的动作,我把楼层高度除以7.3/4英寸的最大立管高度。然后这给了我一个立管的数量,需要四舍五入到下一个偶数。然后我取这个数字,除以楼层高度的差来创建我的立管。

David Bethel 发表于 2022-7-5 18:22:55

对于正数,可能:
 

(if (/= (fix n) n)
   (setq n (1+ (fix n))))

 
-大卫

msirois 发表于 2022-7-5 18:34:56

 
非常感谢。然而,我最终使用了李·麦克的帖子中的代码。以下是我使用的:
 

;;; Q is my variable that I needed round up
(defun ROUND ( n m )
   (cond
       ((equal 0.0 (rem n m) 1e- n)
       ((< n 0) (- n (rem n m)))
       ((+ n (- m (rem n m))))
   )
)

(setq B (ROUND Q 1))

Lee Mac 发表于 2022-7-5 18:46:40

仅针对变量,这里有另一个仅适用于正整数的变量:
(defun LM:int:roundup1 ( n ) (fix (+ n 1 -1e-))
_$ (LM:int:roundup1 2.1)
3
对于四舍五入到任意倍数:
(defun LM:int:roundup ( n m ) (* m (fix (+ (/ n (float m)) 1 -1e-)))
_$ (LM:int:roundup 4.3 2)
6

msirois 发表于 2022-7-5 18:59:30

你真棒,好先生。

Lee Mac 发表于 2022-7-5 19:05:48

非常感谢。
页: [1]
查看完整版本: 我如何将数字归集到整数