prices: improve precision
This commit is contained in:
parent
40699af34a
commit
8966e765c8
@ -13,7 +13,7 @@ import Data.Maybe
|
||||
import Data.String.Here
|
||||
import Data.Time
|
||||
import qualified Data.Text as T
|
||||
import Control.Monad
|
||||
import Control.Monad (when)
|
||||
import Hledger.Cli
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
@ -30,6 +30,13 @@ Print all prices from the journal.
|
||||
showPrice :: MarketPrice -> String
|
||||
showPrice mp = unwords ["P", show $ mpdate mp, T.unpack . quoteCommoditySymbolIfNeeded $ mpcommodity mp, showAmountWithZeroCommodity $ mpamount mp]
|
||||
|
||||
divideAmount' :: Amount -> Quantity -> Amount
|
||||
divideAmount' a d = a' where
|
||||
a' = (a `divideAmount` d) { astyle = style' }
|
||||
style' = (astyle a) { asprecision = precision' }
|
||||
extPrecision = (1+) . floor . logBase 10 $ (realToFrac d :: Double)
|
||||
precision' = extPrecision + asprecision (astyle a)
|
||||
|
||||
amountCost :: Day -> Amount -> Maybe MarketPrice
|
||||
amountCost d a =
|
||||
case aprice a of
|
||||
@ -37,7 +44,7 @@ amountCost d a =
|
||||
UnitPrice pa -> Just
|
||||
MarketPrice { mpdate = d, mpcommodity = acommodity a, mpamount = pa }
|
||||
TotalPrice pa -> Just
|
||||
MarketPrice { mpdate = d, mpcommodity = acommodity a, mpamount = pa `divideAmount` abs (aquantity a) }
|
||||
MarketPrice { mpdate = d, mpcommodity = acommodity a, mpamount = pa `divideAmount'` abs (aquantity a) }
|
||||
|
||||
postingCosts :: Posting -> [MarketPrice]
|
||||
postingCosts p = mapMaybe (amountCost date) . amounts $ pamount p where
|
||||
|
||||
@ -34,8 +34,13 @@ P 2016/2/1 EUR $1.05
|
||||
2016/1/2 spend
|
||||
expenses 20 EUR @ $1.07
|
||||
assets:bank
|
||||
|
||||
2016/1/3 spend
|
||||
expenses 20 EUR @@ $21.45
|
||||
assets:bank
|
||||
>>>
|
||||
P 2016-01-02 EUR $1.07
|
||||
P 2016-01-03 EUR $1.0725
|
||||
P 2016-01-01 EUR $1.06
|
||||
P 2016-02-01 EUR $1.05
|
||||
>>>2
|
||||
|
||||
Loading…
Reference in New Issue
Block a user