如何在Racket中将实数转换为精确整数?

Eri*_*ack 5 scheme racket

如何将表单的值转换20.2为可以(random ...)接受的值?

我已经尝试过这些:

;; x defined by some earlier maths and of form 20.2

(random (round x))
(random (floor x))
Run Code Online (Sandbox Code Playgroud)

但是两者都返回:

random: contract violation
expected: (or/c (integer-in 1 4294967087) pseudo-random-generator?)
given: 20.0
Run Code Online (Sandbox Code Playgroud)

Ósc*_*pez 8

这些也可以使用,根据文档,它们只是您使用方法的简写:

(random (exact-round x))
(random (exact-floor x))
Run Code Online (Sandbox Code Playgroud)


Eri*_*ack 5

这篇文章似乎回答了Scheme的问题: http://computer-programming-forum.com/40-scheme/674db7a1706960d5.htm

所以通过这样的代码我得到了我想要的结果:

(random (inexact->exact (round x)))
(random (inexact->exact (floor x)))
Run Code Online (Sandbox Code Playgroud)

这是最简单的方法吗?

  • 在球拍中,[`exact-round`](https://docs.racket-lang.org/reference/generic-numbers.html#%28def._%28%28lib._racket%2Fmath..rkt%29. _exact-round%29%29) 和 [`exact-floor`](https://docs.racket-lang.org/reference/generic-numbers.html#%28def._%28%28lib._racket%2Fmath. .rkt%29._exact-floor%29%29) 来自racket/math的函数可以做到这一点。 (3认同)