如何在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
应该怎么写呢?
编译器报错,因为 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.
即,它向上舍入(向正无穷大)整数之间的值。
从 4.08.0 开始,round
定义在 Float
模块中
# Float.round 2.5
- : float = 3.
# Float.round 2.4
- : float = 2.
我想如果它大于或等于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
是 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.
即,它向上舍入(向正无穷大)整数之间的值。
从 4.08.0 开始,round
定义在 Float
模块中
# Float.round 2.5
- : float = 3.
# Float.round 2.4
- : float = 2.