我最近開始使用F#中的計量單位進行遊戲,並認爲我可以編寫一個非常簡單的示例,計算給定增值稅的總額利率和淨總額。使用F#計量單位從淨額+增值稅金額中計算毛額
例如:
淨額可能等於600.00 增值稅稅率是20% 應該給的720.00
毛量,我有以下類型
[<Measure>] type net
[<Measure>] type vatRate
[<Measure>] type vatValue = net * vatRate
[<Measure>] type gross
以下功能
let calculateVat (netValue : float<net>) (vat : float<vatRate>) = netValue * vat
let calculateGross (netValue : float<net>) (vat : float<vatValue>) = netValue + vat
通過以下測試:
let calcVatTest = calculateVat 600.00<net> 0.2<vatRate> = 120.00<vatValue>
let calcGrossTest = calculateGross 600.00<net> 120.00<vatValue> = 720.00<gross>
我遇到的問題是,我不能得到的calculateGross功能正確的語法,我得到一個編譯錯誤: 「計量單位「 vatValue」計量單位不匹配‘net’的」
這好像我需要定義總值類似以下內容:
[<Measure>] type gross = net + vatValue
但是編譯器不喜歡+
任何想法,我可能會做到這一點?
由於
的vatRate = 1作品很好。 有什麼辦法有calculateGross方法返回一個float類型的? –
如果您使用'vatRate = 1',那麼度量單位類型系統無法區分類型爲'float'和'float '的值 - 因爲它們意味着相同的事情。您應該能夠添加註釋':浮動'但實際上 - 它只是一個跟蹤或_NUMBER_一個_rate_和一些意思_money_之間的差異。 –