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.String.Here
|
||||||
import Data.Time
|
import Data.Time
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import Control.Monad
|
import Control.Monad (when)
|
||||||
import Hledger.Cli
|
import Hledger.Cli
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
@ -30,6 +30,13 @@ Print all prices from the journal.
|
|||||||
showPrice :: MarketPrice -> String
|
showPrice :: MarketPrice -> String
|
||||||
showPrice mp = unwords ["P", show $ mpdate mp, T.unpack . quoteCommoditySymbolIfNeeded $ mpcommodity mp, showAmountWithZeroCommodity $ mpamount mp]
|
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 :: Day -> Amount -> Maybe MarketPrice
|
||||||
amountCost d a =
|
amountCost d a =
|
||||||
case aprice a of
|
case aprice a of
|
||||||
@ -37,7 +44,7 @@ amountCost d a =
|
|||||||
UnitPrice pa -> Just
|
UnitPrice pa -> Just
|
||||||
MarketPrice { mpdate = d, mpcommodity = acommodity a, mpamount = pa }
|
MarketPrice { mpdate = d, mpcommodity = acommodity a, mpamount = pa }
|
||||||
TotalPrice pa -> Just
|
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 :: Posting -> [MarketPrice]
|
||||||
postingCosts p = mapMaybe (amountCost date) . amounts $ pamount p where
|
postingCosts p = mapMaybe (amountCost date) . amounts $ pamount p where
|
||||||
|
|||||||
@ -34,8 +34,13 @@ P 2016/2/1 EUR $1.05
|
|||||||
2016/1/2 spend
|
2016/1/2 spend
|
||||||
expenses 20 EUR @ $1.07
|
expenses 20 EUR @ $1.07
|
||||||
assets:bank
|
assets:bank
|
||||||
|
|
||||||
|
2016/1/3 spend
|
||||||
|
expenses 20 EUR @@ $21.45
|
||||||
|
assets:bank
|
||||||
>>>
|
>>>
|
||||||
P 2016-01-02 EUR $1.07
|
P 2016-01-02 EUR $1.07
|
||||||
|
P 2016-01-03 EUR $1.0725
|
||||||
P 2016-01-01 EUR $1.06
|
P 2016-01-01 EUR $1.06
|
||||||
P 2016-02-01 EUR $1.05
|
P 2016-02-01 EUR $1.05
|
||||||
>>>2
|
>>>2
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user