如何将浮点数(1,2)分为1和2整数?

时间:2018-09-29 20:00:25

标签: f#

我正在学习F#,并且有一个作业必须将浮点数视为坐标。例如,将float 2.3视为坐标(2.3),其中x为2,y为3。

如何拆分浮点数以进行计算?

我正在尝试创建一个函数来计算向量的长度: 让lenOfVec(1.2,2.3)并使用毕达哥拉斯的方法获得斜边的长度。

但是我已经陷于分裂浮动状态了。

希望有些人能帮忙!

2 个答案:

答案 0 :(得分:1)

拥有多达F#/。NET的库,只需一小段代码即可完成将浮点数分成两部分的工作:

let splitFloat n = n.ToString().Split('.') |> Array.map float
  • 库函数ToString()将参数n(据称float)转换为string
  • 应用于此字符串的
  • 库函数Split('.')将其转换为两个字符串的array,分别代表小数点前的第一个数字和小数点后的第二个数字
  • 最后,这个数组2 strings是通过在另一个库函数float的帮助下将库函数Array.map应用于每个数组元素而转换的,​​从而生成了两个所需浮点数的数组

应用于随机浮点数时,概述的转化链看起来像

123.456->“ 123.456”-> [| 123; 456 |]-> [| 123.0; 456.0 |]

答案 1 :(得分:0)

从这里的其他几个答案中可以看出,类似的例子对于一些示例似乎有效:

open System

///Takes in a float and returns a tuple of the the two parts.
let split (n: float) = 
    let x = Math.Truncate(n)

    let bits = Decimal.GetBits(decimal n)
    let count = BitConverter.GetBytes(bits.[3]).[2]    
    let dec = n - x

    let y = dec * Math.Pow(10., float count)

    x, y

示例:

  • 2.3->(2.0,3.0)
  • 200.123->(200.0,123.0)
  • 5.23->(5.0,23.0)

获取X很容易,因为您可以截断小数部分。

获取Y是从this answerthis one输入的信息。