F#将字符串转换为float

moe*_*ius 14 floating-point f# type-conversion

我有一个我无法弄清楚的简单问题.我有一个程序,它应该从输入读取一个浮点数.问题是它会变成字符串而我不能为我的生活弄清楚如何将它转换为浮点数(是的,我是一个完整的新词).

let searchString = args.[0]
let myFloat = hmm hmmm hmmmm
Run Code Online (Sandbox Code Playgroud)

Tom*_*cek 16

另一方面,有关于转换的相关问题.这有点棘手,因为浮点格式取决于当前的OS文化.该float函数适用于不变文化格式的数字(类似"3.14").如果你有依赖文化格式的浮动(例如某些国家的"3,14"),那么你需要使用Single.Parse.

例如,在我的机器上(使用捷克文化设置,使用"3,14"):

> float "1.1";;
val it : float = 1.1
> System.Single.Parse("1,1");;
val it : float32 = 1.10000002f
Run Code Online (Sandbox Code Playgroud)

如果反过来调用,这两个函数都会抛出异常.该Parse方法还具有重载,CultureInfo可以显式指定文化

  • 请注意,`Single` 是一个 float32,要获得一个浮点数,您需要使用 `Double.Parse` 或其更安全的表亲 `Double.TryParse`。 (2认同)

Ram*_*nir 9

let myFloat = float searchString

就那么简单.


Ala*_*res 6

一个side-effect-freeparseFloat 函数看起来像:

let parseFloat s =
    match System.Double.TryParse(s) with 
    | true, n -> Some n
    | _ -> None
Run Code Online (Sandbox Code Playgroud)

甚至更短:

let parseFloat s = try Some (float s) with | _ -> None
Run Code Online (Sandbox Code Playgroud)