2011-03-11 86 views

回答

2

我会使用类似

let convert (s:string) : float<m> = 
    float s 
    |> LanguagePrimitives.FloatWithMeasure 
+1

我不知道,似乎有点原始。 – Daniel

2

另一种选择,除了KVB的做法是通过1.0<m>乘以原始浮点值:

let convert (s:string) = 
    (float s) * 1.0<m> 
2

要添加另一种选择,我可能会写:

let inline convertToMeters x : float<m> = unbox (box (float x));; 

您可以使用该函数来转换任何类型,可以b e转换为float的类型float<m>(这很好,因为它也适用于整数等,但不是所有随机类型,如System.Random)。你可以从类型签名看到这个:

val inline convertToMeters : 
    ^a -> float<m> when ^a : (static member op_Explicit : ^a -> float) 
+2

请注意,如果你想概括一下,你可以走得更远,结果类型是'float <'t>'而不是'float '。 – kvb