3

我有一个将浮点数返回到小数点后三位的过程。

>(gpa ’(A A+ B+ B))
3.665

有没有办法在Scheme中将这个四舍五入到3.67?

我正在使用带有 Slib 3b3 的SCM版本 5e7、附加的简单方案 (simply.scm、functions.scm、ttt.scm、match.scm、database.scm)和我使用的答案库已加载。

顺便说一句,我今天早上把这个输入我的电脑

> (* 1 (- 0.5 0.4 0.1))
-27.755575615628913e-18

不不不不!

你如何处理这种不准确的情况?

4

1 回答 1

6

尝试

(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。(偶数向下取整;赔率向上取整)

至于你的第二个问题。使用确切的数字:

> (* 1 (- #e0.5 #e0.4 #e0.1))
0

> #e0.5
1/2
于 2013-04-30T14:19:13.950 回答