You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Lisp中控制浮点数的小数位数?示例:将89.833336转为89.83

在Lisp中控制浮点数小数位数的方法

你可以通过两种方式实现需求:一种是仅在输出时格式化显示两位小数(不改变原始数值),另一种是直接对数值进行四舍五入/截断处理(修改数值本身)。

1. 格式化输出(推荐,不改变原始数值)

Lisp的format函数支持丰富的格式控制,使用~,2f格式符即可将浮点数格式化为保留两位小数的形式(默认四舍五入)。

修改你的调用代码即可:

(defun average(&rest nums)
   (float (/ (apply #'+ nums) (length nums))))

;; 格式化输出两位小数
(format t "~,2f~%" (average 99 97 78 88 99 78)) ; 输出 89.83

~,2f的含义:~f表示按浮点数格式输出,,2指定保留两位小数;若需要直接截断而非四舍五入,可以使用~,2,0f(第二个数字0表示截断模式)。

2. 修改数值本身(四舍五入到两位小数)

如果需要让函数直接返回保留两位小数的数值,可以通过先放大100倍、取整、再缩小100倍的方式实现:

(defun average(&rest nums)
  (let ((avg (float (/ (apply #'+ nums) (length nums)))))
    (/ (round (* avg 100)) 100.0))) ; round实现四舍五入,若要截断用truncate

(average 99 97 78 88 99 78) ; 返回 89.83
  • 使用round会进行四舍五入,得到最接近的两位小数数值;
  • 如果需要直接截断小数部分(比如89.833336变成89.83而非89.84),可以把round换成truncate。

内容的提问来源于stack exchange,提问作者David N Richards

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 21:17:46