2015-10-09 25 views
1

我想如果它大于或等于0将它舍入到更大的数字,如果它小于0将它舍入到之前的数字。例如:如果数字是2.5显示3,并且数字是-2.5显示-3。我应该如何写这个? 我写道:如何在ocaml中舍入数字?

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 

我应该如何写呢?

回答

3

编译器抱怨,因为0int类型的常量。如果您使用0.0,它会更好。

我个人使用这样的定义:中途整数之间

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

也就是说,它向上舍(向正无穷大)值:

let frnd f = floor (f +. 0.5) 

但是,它不工作,完全像你想。