如何在ocaml中舍入一个数字?

how to round a number in ocaml?

我想如果它大于或等于0就把它四舍五入到更大的数字,如果它小于0就把它四舍五入到之前的数字。例如:如果数字是 2.5,则显示 3,如果数字是 -2.5,则显示 -3。我应该怎么写这个? 我写道:

let round x = if (x >= 0) then int_of_float x
  else int_of_float ( x -. 1.0);;

let round x = if ( x>=0) then truncate (x +. 0.5) 
  else truncate ( x -. 0.5);;

并且两者都给了我同样的错误:

Error: This expression has type int but an expression was expected of type
         float

应该怎么写呢?

编译器报错,因为 0int 类型的常量。如果使用 0.0.

效果会更好

我个人使用这个定义:

let frnd f = floor (f +. 0.5)

但是,它并不像您想要的那样工作:

# frnd 2.5;;
- : float = 3.
# frnd (-2.5);;
- : float = -2.
# frnd (-2.500000001);;
- : float = -3.

即,它向上舍入(向正无穷大)整数之间的值。

从 4.08.0 开始,round 定义在 Float 模块中

# Float.round 2.5
- : float = 3.
# Float.round 2.4
- : float = 2.