繁体   English   中英

更优雅的方式做F#中的CultureInvariant Double.parse

[英]More elegant way to do CultureInvariant Double.parse in F#

我有一个字符串格式的数字数组(例如[|“1”;“2”;“3”... |])并希望将它们转换为双精度数,但我想以CultureInvariant的方式进行。 我当然可以这样做:

[|"1"; "2"|] |> Array.map (fun (a) -> Double.Parse(a, CultureInfo.InvariantCulture))

但是,有没有办法这样做:

[|"1"; "2"|] |> Array.map Double.Parse

,但是使用CultureInfo.InvariantCulture? 此代码看起来更具可读性。 换句话说,有没有办法将CultureInfo.InvariantCulture传递给flow中的Double.parse,或者为所有程序/脚本全局设置CultureInfo.InvariantCulture。

在F#中, doublefloat是相同的,它们都对应于C# double 看到这个答案

因此,您可以简单地使用float运算符来处理来自多种类型(包括字符串)的转换:

[|"1"; "2"|] |> Array.map float

F#转换运算符都明智地使用CultureInfo.InvariantCulture而无需您指定它:从float运算符使用的F#源代码中查看此函数

如果要使用C#兼容术语,可以使用double运算符,它只是float的别名。

如果需要32位浮点数(C#float),可以使用float32

非常简单地定义辅助函数并使用它:

let ParseInvariant a = Double.Parse(a, CultureInfo.InvariantCulture)
let b = [|"1"; "2"|] |> Array.map ParseInvariant

或定义扩展方法:

type Double with
    static member ParseInvariant a = Double.Parse(a, CultureInfo.InvariantCulture)
let b = [|"1"; "2"|] |> Array.map Double.ParseInvariant

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM