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