使用 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>