我有一个将float返回到三位小数的过程。
>(gpa ’(A A+ B+ B))
3.665
有没有什么办法可以在Scheme中将其舍入到3.67?
我正在使用SCM版本5e7和Slib 3b3,附加Simply Scheme libraries(simple.scm,functions.scm,ttt.scm,match.scm,database.scm )和我使用的答案库。
顺便说一句,我今天早上把它输入我的电脑
> (* 1 (- 0.5 0.4 0.1))
-27.755575615628913e-18
不不不不!
你如何处理这种不准确的行为?
答案 0 :(得分:5)
尝试
(define (round-off z n)
(let ((power (expt 10 n)))
(/ (round (* power z)) power)))
> (round-off 3.665 2)
3.66
> (round-off 3.6677 2)
3.67
注3.665轮到3.66,而不是3.67。 (Evens四舍五入;赔率上升)
至于你的第二个问题。使用确切的数字:
> (* 1 (- #e0.5 #e0.4 #e0.1))
0
> #e0.5
1/2