Andrew1979 发表于 2022-7-5 23:12:34

舍入为偶数

在lisp中有没有办法将其四舍五入到最近的偶数?
例如,如果我把一个距离除以某个数字,然后它除以5,我怎么能把它变成6呢。当然,如果它被分成4,我不想对这个数字做任何事情。
谢谢

marko_ribar 发表于 2022-7-5 23:23:31


(defun even ( n )
(setq n (fix n))
(if (not (eq (rem n 2) 0))
   (setq n (1+ n))
)
n
)

 

(even 2.1 => 2)
(even 5.3 => 6)

Andrew1979 发表于 2022-7-5 23:33:04

谢谢,效果很好。

Lee Mac 发表于 2022-7-5 23:42:53

另一个:
(defun even ( x ) (* 2 (fix (/ (1+ x) 2))))并考虑负值:
(defun even ( x ) (* 2 (fix (/ ((if (< x 0) 1- 1+) x) 2))))和另一种方法:
(defun even ( x ) (* 2 (atoi (rtos (/ x 2.0) 2 0))))

Snownut 发表于 2022-7-5 23:50:37

马尔科,
 
OP希望向上取整到下一个偶数,您的代码将2.1取整到2,应该是4。

Lee Mac 发表于 2022-7-6 00:00:42

 
据我所知,OP想要的是最近的偶数,而不是下一个:
 

Snownut 发表于 2022-7-6 00:07:22

没问题。。。。

Andrew1979 发表于 2022-7-6 00:19:15

谢谢所有的回复,我现在已经开始工作了。这些论坛上有一些非常聪明的人。
页: [1]
查看完整版本: 舍入为偶数