获取小数并以元组形式返回。 F#

时间:2016-01-20 05:13:09

标签: f# f#-interactive f#-3.0

我有一个返回小数的函数说:5.839895013, 如何让它以元组形式返回小数,如(5,8)。 我试过做mod但我得到了这个

  

5.839895013%10.0 ;;   val it:float = 5.839895013

1 个答案:

答案 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)