【问题标题】:how to round a number in ocaml?如何在ocaml中舍入一个数字?
【发布时间】:2015-10-09 20:53:08
【问题描述】:

如果它大于或等于 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 的比较,而不是0.00.

标签: ocaml rounding truncate


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-28
      • 2019-11-14
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 2011-01-18
      • 1970-01-01
      相关资源
      最近更新 更多