在OCaml中将float转换为int

Swi*_*iss 16 ocaml

我怎么能把浮点数转换为OCaml中的整数?

我知道如何从int获取一个浮点数,但似乎没有一种简单的方法可以从浮点数中获取一个int.

Pas*_*uoq 25

# int_of_float ;;
- : float -> int = <fun>
Run Code Online (Sandbox Code Playgroud)

我假设你想要一个附近int(这个回合朝向零,与C一样).

如果您想要IEEE表示,请参阅Int64.bits_of_float.


tol*_*ius 9

你可以简单地truncate说,如果float 的整数部分是你想要的:

printf "number\tint\tfloor\tceil\n";
List.iter 
  (fun x -> printf "%.1f\t%d\t%.1f\t%.1f\n" x (truncate x) (floor x) (ceil x)) 
  fs;;

(* 
 * number       int     floor   ceil
 *    3.3        3       3.0     4.0
 *    3.5        3       3.0     4.0
 *    3.7        3       3.0     4.0
 *   -3.3       -3      -4.0    -3.0
 *)
Run Code Online (Sandbox Code Playgroud)

floor/ ceil,然后truncate,如果你真的想要将它四舍五入到最接近的整数