Racket语言中如何对数值四舍五入并保留1位小数
Racket 指定位数小数四舍五入实现方法
Racket 内置的 round 函数仅返回与输入值最接近的整数,无法直接设置保留小数位数,可根据使用场景选择以下两种实现方式:
方式1:数值计算(返回数值类型结果)
核心逻辑为缩放取整:将待处理数值放大 10^n 倍(n 为需要保留的小数位数),对放大后的结果调用 round 取整,再缩小相同倍数,即可得到四舍五入后保留指定位数小数的数值。
- 保留1位小数的直接实现代码:
(/ (round (* 8.67 10)) 10) ;; 执行返回结果:8.7
- 可封装为通用复用函数,支持任意保留位数:
(define (round-to-decimal num precision) (let ([scale (expt 10 precision)]) (/ (round (* num scale)) scale)))
- 函数调用示例:
> (round-to-decimal 8.67 1) 8.7 > (round-to-decimal 9.43 1) 9.4 > (round-to-decimal 7.96 1) 8.0
方式2:格式化输出(返回字符串类型结果,适合展示场景)
如果需要将处理后的成绩直接放入星型标识中展示,推荐直接使用内置的 real->decimal-string 函数,传入数值和需要保留的小数位数即可,函数会自动完成四舍五入,同时自动补全小数位的0,避免整数成绩显示时缺失小数部分的问题:
> (real->decimal-string 8.67 1) "8.7" > (real->decimal-string 9 1) "9.0" > (real->decimal-string 6.24 1) "6.2"
内容的提问来源于stack exchange,提问作者Afonso Britto
相关产品推荐
相关产品推荐

