如果它大于或等于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
我该怎么写呢?
答案 0 :(得分:4)
编译器抱怨,因为0
是int
类型的常量。如果您使用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 开始,round
在 Float
模块中定义
# Float.round 2.5
- : float = 3.
# Float.round 2.4
- : float = 2.