我有一个返回小数的函数说:5.839895013, 如何让它以元组形式返回小数,如(5,8)。 我试过做mod但我得到了这个
5.839895013%10.0 ;; val it:float = 5.839895013
答案 0 :(得分:4)
首先使用带有浮点数的mod
无效(正如您所见) - 即使它会对整数进行对话,它也会给出余数(这是一个整数) )你的数字除以10 - 所以我希望它是5或6(取决于你是否期望四舍五入)
更好的方法IMO是在.
之后切割零件并使用一些基本数学:
假设您想要一个两个int
的元组,它可以像以下一样简单:
let tupled x =
let first = int x
let second = int ((x - float first)*10.0)
(first, second)
产生
> tupled 5.839895013;;
val it : int * int = (5, 8)
System.Math
移动*10
,可能更具可读性:
let tupled x =
let first = int (System.Math.Floor x)
let second = int (System.Math.Round x*10.0) - 10*first
(first, second)
另请注意,第二个版本使用不同的舍入:
> tupled 5.86;;
val it : int * int = (5, 8)
VS
> tupled 5.86;;
val it : int * int = (5, 9)