2011-03-11 101 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