我正在学习F#,并且有一个作业必须将浮点数视为坐标。例如,将float 2.3视为坐标(2.3),其中x为2,y为3。
如何拆分浮点数以进行计算?
我正在尝试创建一个函数来计算向量的长度: 让lenOfVec(1.2,2.3)并使用毕达哥拉斯的方法获得斜边的长度。
但是我已经陷于分裂浮动状态了。
希望有些人能帮忙!
答案 0 :(得分:1)
拥有多达F#/。NET的库,只需一小段代码即可完成将浮点数分成两部分的工作:
let splitFloat n = n.ToString().Split('.') |> Array.map float
n
(据称float
)转换为string
array
,分别代表小数点前的第一个数字和小数点后的第二个数字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
示例:
获取X很容易,因为您可以截断小数部分。
获取Y是从this answer和this one输入的信息。