如何围绕ocaml中的数字?

时间:2015-10-09 20:53:09

标签: ocaml rounding truncate

如果它大于或等于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

我该怎么写呢?

2 个答案:

答案 0 :(得分:4)

编译器抱怨,因为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.

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

答案 1 :(得分:2)

从 4.08.0 开始,roundFloat 模块中定义

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