使用 LanguagePrimitives 來保留或設定單位

當函式由於低階操作而不自動保留單元時,LanguagePrimitives 模組可用於設定支援它們的基元上的單位:

/// This cast preserves units, while changing the underlying type
let inline castDoubleToSingle (x : float<'u>) : float32<'u> =
    LanguagePrimitives.Float32WithMeasure (float32 x)

要將度量單位分配給雙精度浮點值,只需用正確的單位乘以 1 即可:

[<Measure>]
type USD

let toMoneyImprecise (amount : float) =
   amount * 1.<USD>

要將度量單位分配給非 System.Double 的無單位值,例如,從以其他語言編寫的庫中到達,請使用轉換:

open LanguagePrimitives

let toMoney amount =
   amount |> DecimalWithMeasure<'u>

以下是 F#interactive 報告的函式型別:

val toMoney : amount:decimal -> decimal<'u>
val toMoneyImprecise : amount:float -> float<USD>