F#将字符串转换为浮点数

16

我有一个简单的问题,但一直无法解决。我有一个程序需要从输入中读取浮点数。问题是输入会以字符串形式出现,我无法将其转换为浮点数(是的,我是个完全的新手)。

let searchString = args.[0]
let myFloat = hmm hmmm hmmmm

要格式化代码,请在每行之前放置四个空格,或在编辑器中选择它并按下{}按钮。有关更多格式化帮助,请参阅Markdown编辑帮助页面。 - R. Martinho Fernandes
3个回答

19

这个问题的相关回答 中有一个涉及相反转换的问题。但这个问题有一些棘手,因为浮点数格式取决于当前的操作系统区域设置。 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

两个函数如果以相反的方式调用会抛出异常。Parse 方法还有一个重载,它接受 CultureInfo 参数,您可以在其中明确指定区域设置。


3
请注意,Singlefloat32 类型,如果需要获取一个 float 类型,您需要使用 Double.Parse 或更加安全的 Double.TryParse - Nestor Demeure

9

let myFloat = float searchString

就这么简单。


1
参见@Thomas。 浮点数字符串表示取决于文化。 - James Moore
当解析失败时会发生什么? - fahadash
抛出 System.FormatException 异常。 - Ramon Snir

7
一个没有副作用的 parseFloat 函数应该长这样:
let parseFloat s =
    match System.Double.TryParse(s) with 
    | true, n -> Some n
    | _ -> None

甚至可以更简短:
let parseFloat s = try Some (float s) with | _ -> None

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接