簡體   English   中英

F#測量單位建模度量標准前綴(微,毫,納米)

[英]F# Units of Measurement modeling metric prefix (micro, milli, nano)

根據這個問題: F#中度量單位的分數冪沒有F#中的度量單位支持的分數冪。

在我的應用程序中,有時候使用度量前綴來考慮數據是有益的,例如在處理秒時。 有時我需要一毫秒的結果,有時甚至幾秒鍾。

我正在考慮使用的另一種選擇是這個

[<Measure>] type milli
[<Measure>] type second

let a = 10.0<second>;
let b = 10.0<milli*second>

這給了我:

val a : float<second> = 10.0
val b : float<milli second> = 10.0

現在我想允許使用這兩個操作進行計算。 所以我能做到

let milliSecondsPerSecond = 1000.0<(milli*second)/second>

let a = 10.0<second>;
let b = 10.0<milli*second>

(a*milliSecondsPerSecond) + b

這給了我我想要的東西

val it : float<milli second> = 10010.0

現在,當你想要支持多個單元和多個前綴時,這一切都很好而且有光澤但很快就會失控。 所以我認為有必要將其烘焙成更通用的解決方案,但不知道從哪里開始。 我試過了

let milliPer<'a> = 1000.0<(milli * 'a) / 'a>

但這不起作用,因為f#抱怨並告訴我“非零常數不能有通用單位”......

由於我認為單位前綴是一個常見問題,我想有人之前已經解決了這個問題。 在F#中是否有更慣用的方法來做單位前綴?

您將常量寫為1000.0<(milli second)/second>表示每秒1000毫秒,但實際上(您可以將此作為代數簡化)“milli”只表示您需要將任何單位乘以1000以獲得單位沒有“milli”前綴。

因此,您可以簡化milliPer (和milliSecondsPerSecond )的定義,只需說:

let milli = 1000.0<milli>

然后可以將其與其他措施一起使用:

(10.0<second> * milli) + 10.0<milli second>   
(10.0<meter> * milli) + 10.0<milli meter>

我認為這不會導致代碼中任何地方出現任何復雜問題 - 使用單位時這是一個非常精細的模式(我看到人們使用percent單位,但轉換為0.01)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM