我在Emacs Lisp 24.5.1中将整数除法转换为浮点解决方案时遇到了一些微不足道的问题。
(message "divide: %2.1f" (float (/ 1 2)))
"divide: 0.0"
我相信这个表达式首先计算 1/2,截断后发现它是 0,然后将 0.0 分配给浮点数。 显然,我希望是0.5。我在这里没有看到什么? 谢谢
如果 /
函数的至少一个参数是浮点数,则执行浮点除法;如果其所有参数都是整数,则执行整数商运算(向 0 舍入)。如果要执行浮点除法,请确保至少有一个参数是浮点型。
(message "divide: %2.1f" (/ (float 1) 2))
(当然,如果它们是常量,你可以写(/ 1.0 2)
或(/ 1 2.0)
)
许多编程语言都是这样工作的。