lib: refactor: more consistent amount precision helpers
Hledger.Data.Amount: renamed: setAmountPrecision -> amountSetPrecision setFullPrecision -> amountSetFullPrecision setMixedAmountPrecision -> mixedAmountSetPrecision added: mixedAmountSetFullPrecision
This commit is contained in:
parent
d5ed8090fa
commit
d865ec5d65
@ -83,9 +83,9 @@ module Hledger.Data.Amount (
|
||||
showAmountWithZeroCommodity,
|
||||
showAmountDebug,
|
||||
showAmountWithoutPrice,
|
||||
setAmountPrecision,
|
||||
amountSetPrecision,
|
||||
withPrecision,
|
||||
setFullPrecision,
|
||||
amountSetFullPrecision,
|
||||
setAmountInternalPrecision,
|
||||
withInternalPrecision,
|
||||
setAmountDecimalPoint,
|
||||
@ -129,7 +129,8 @@ module Hledger.Data.Amount (
|
||||
showMixedAmountLinesB,
|
||||
wbToText,
|
||||
wbUnpack,
|
||||
setMixedAmountPrecision,
|
||||
mixedAmountSetPrecision,
|
||||
mixedAmountSetFullPrecision,
|
||||
canonicaliseMixedAmount,
|
||||
-- * misc.
|
||||
ltraceamount,
|
||||
@ -330,17 +331,17 @@ amountIsZero Amount{aquantity=q} = q == 0
|
||||
|
||||
-- | Set an amount's display precision, flipped.
|
||||
withPrecision :: Amount -> AmountPrecision -> Amount
|
||||
withPrecision = flip setAmountPrecision
|
||||
withPrecision = flip amountSetPrecision
|
||||
|
||||
-- | Set an amount's display precision.
|
||||
setAmountPrecision :: AmountPrecision -> Amount -> Amount
|
||||
setAmountPrecision p a@Amount{astyle=s} = a{astyle=s{asprecision=p}}
|
||||
amountSetPrecision :: AmountPrecision -> Amount -> Amount
|
||||
amountSetPrecision p a@Amount{astyle=s} = a{astyle=s{asprecision=p}}
|
||||
|
||||
-- | Increase an amount's display precision, if needed, to enough decimal places
|
||||
-- to show it exactly (showing all significant decimal digits, excluding trailing
|
||||
-- zeros).
|
||||
setFullPrecision :: Amount -> Amount
|
||||
setFullPrecision a = setAmountPrecision p a
|
||||
amountSetFullPrecision :: Amount -> Amount
|
||||
amountSetFullPrecision a = amountSetPrecision p a
|
||||
where
|
||||
p = max displayprecision naturalprecision
|
||||
displayprecision = asprecision $ astyle a
|
||||
@ -841,8 +842,13 @@ ltraceamount :: String -> MixedAmount -> MixedAmount
|
||||
ltraceamount s = traceWith (((s ++ ": ") ++).showMixedAmount)
|
||||
|
||||
-- | Set the display precision in the amount's commodities.
|
||||
setMixedAmountPrecision :: AmountPrecision -> MixedAmount -> MixedAmount
|
||||
setMixedAmountPrecision p = mapMixedAmount (setAmountPrecision p)
|
||||
mixedAmountSetPrecision :: AmountPrecision -> MixedAmount -> MixedAmount
|
||||
mixedAmountSetPrecision p = mapMixedAmount (amountSetPrecision p)
|
||||
|
||||
-- | In each component amount, increase the display precision sufficiently
|
||||
-- to render it exactly (showing all significant decimal digits).
|
||||
mixedAmountSetFullPrecision :: MixedAmount -> MixedAmount
|
||||
mixedAmountSetFullPrecision = mapMixedAmount amountSetFullPrecision
|
||||
|
||||
mixedAmountStripPrices :: MixedAmount -> MixedAmount
|
||||
mixedAmountStripPrices = mapMixedAmount (\a -> a{aprice=Nothing})
|
||||
|
||||
@ -1278,7 +1278,7 @@ journalApplyAliases aliases j =
|
||||
-- [ "P"
|
||||
-- , showDate (pddate pd)
|
||||
-- , T.unpack (pdcommodity pd)
|
||||
-- , (showAmount . setAmountPrecision maxprecision) (pdamount pd
|
||||
-- , (showAmount . amountSetPrecision maxprecision) (pdamount pd
|
||||
-- )
|
||||
-- ]
|
||||
|
||||
|
||||
@ -182,7 +182,7 @@ entryp = do
|
||||
tstatus = Cleared,
|
||||
tpostings = [
|
||||
nullposting{paccount=a
|
||||
,pamount=Mixed [setAmountPrecision (Precision 2) $ num hours] -- don't assume hours; do set precision to 2
|
||||
,pamount=Mixed [amountSetPrecision (Precision 2) $ num hours] -- don't assume hours; do set precision to 2
|
||||
,ptype=VirtualPosting
|
||||
,ptransaction=Just t
|
||||
}
|
||||
|
||||
@ -72,7 +72,7 @@ tsDraw UIState{aopts=UIOpts{cliopts_=copts@CliOpts{reportspec_=rspec@ReportSpec{
|
||||
_ -> [maincontent]
|
||||
where
|
||||
-- as with print, show amounts with all of their decimal places
|
||||
t = transactionMapPostingAmounts setFullPrecision t'
|
||||
t = transactionMapPostingAmounts amountSetFullPrecision t'
|
||||
maincontent = Widget Greedy Greedy $ do
|
||||
let
|
||||
prices = journalPriceOracle (infer_value_ ropts) j
|
||||
|
||||
@ -373,7 +373,7 @@ amountAndCommentWizard PrevInput{..} EntryState{..} = do
|
||||
balancingamt = negate $ sum $ map pamount realps where realps = filter isReal esPostings
|
||||
balancingamtfirstcommodity = Mixed $ take 1 $ amounts balancingamt
|
||||
showamt =
|
||||
showMixedAmount . setMixedAmountPrecision
|
||||
showMixedAmount . mixedAmountSetPrecision
|
||||
-- what should this be ?
|
||||
-- 1 maxprecision (show all decimal places or none) ?
|
||||
-- 2 maxprecisionwithpoint (show all decimal places or .0 - avoids some but not all confusion with thousands separators) ?
|
||||
|
||||
@ -93,7 +93,7 @@ close CliOpts{rawopts_=rawopts, reportspec_=rspec} j = do
|
||||
|
||||
-- since balance assertion amounts are required to be exact, the
|
||||
-- amounts in opening/closing transactions should be too (#941, #1137)
|
||||
precise = setFullPrecision
|
||||
precise = amountSetFullPrecision
|
||||
|
||||
-- interleave equity postings next to the corresponding closing posting, or put them all at the end ?
|
||||
interleaved = boolopt "interleaved" rawopts
|
||||
|
||||
@ -60,7 +60,7 @@ print' opts j = do
|
||||
-- that. For now we try to reverse it by increasing all amounts' decimal places
|
||||
-- sufficiently to show the amount exactly. The displayed amounts may have minor
|
||||
-- differences from the originals, such as trailing zeroes added.
|
||||
let j' = journalMapPostingAmounts setFullPrecision j
|
||||
let j' = journalMapPostingAmounts amountSetFullPrecision j
|
||||
case maybestringopt "match" $ rawopts_ opts of
|
||||
Nothing -> printEntries opts j'
|
||||
Just desc -> printMatch opts j' $ T.pack desc
|
||||
|
||||
Loading…
Reference in New Issue
Block a user