lib: setFullPrecision, setMinimalPrecision (#941)
This commit is contained in:
parent
c5ae8e6891
commit
9e4b302af7
@ -75,6 +75,8 @@ module Hledger.Data.Amount (
|
|||||||
maxprecisionwithpoint,
|
maxprecisionwithpoint,
|
||||||
setAmountPrecision,
|
setAmountPrecision,
|
||||||
withPrecision,
|
withPrecision,
|
||||||
|
setFullPrecision,
|
||||||
|
setMinimalPrecision,
|
||||||
setAmountInternalPrecision,
|
setAmountInternalPrecision,
|
||||||
withInternalPrecision,
|
withInternalPrecision,
|
||||||
setAmountDecimalPoint,
|
setAmountDecimalPoint,
|
||||||
@ -124,7 +126,7 @@ module Hledger.Data.Amount (
|
|||||||
) where
|
) where
|
||||||
|
|
||||||
import Data.Char (isDigit)
|
import Data.Char (isDigit)
|
||||||
import Data.Decimal (roundTo)
|
import Data.Decimal (roundTo, decimalPlaces, normalizeDecimal)
|
||||||
import Data.Function (on)
|
import Data.Function (on)
|
||||||
import Data.List
|
import Data.List
|
||||||
import Data.Map (findWithDefault)
|
import Data.Map (findWithDefault)
|
||||||
@ -278,6 +280,23 @@ setAmountPrecision p a@Amount{astyle=s} = a{astyle=s{asprecision=p}}
|
|||||||
withPrecision :: Amount -> Int -> Amount
|
withPrecision :: Amount -> Int -> Amount
|
||||||
withPrecision = flip setAmountPrecision
|
withPrecision = flip setAmountPrecision
|
||||||
|
|
||||||
|
-- | Increase an amount's display precision, if necessary, enough so
|
||||||
|
-- that it will be shown exactly, with all significant decimal places
|
||||||
|
-- (excluding trailing zeros).
|
||||||
|
setFullPrecision :: Amount -> Amount
|
||||||
|
setFullPrecision a = setAmountPrecision p a
|
||||||
|
where
|
||||||
|
p = max displayprecision normalprecision
|
||||||
|
displayprecision = asprecision $ astyle a
|
||||||
|
normalprecision = fromIntegral $ decimalPlaces $ normalizeDecimal $ aquantity a
|
||||||
|
|
||||||
|
-- | Set an amount's display precision to just enough so that it will
|
||||||
|
-- be shown exactly, with all significant decimal places.
|
||||||
|
setMinimalPrecision :: Amount -> Amount
|
||||||
|
setMinimalPrecision a = setAmountPrecision normalprecision a
|
||||||
|
where
|
||||||
|
normalprecision = fromIntegral $ decimalPlaces $ normalizeDecimal $ aquantity a
|
||||||
|
|
||||||
-- | Get a string representation of an amount for debugging,
|
-- | Get a string representation of an amount for debugging,
|
||||||
-- appropriate to the current debug level. 9 shows maximum detail.
|
-- appropriate to the current debug level. 9 shows maximum detail.
|
||||||
showAmountDebug :: Amount -> String
|
showAmountDebug :: Amount -> String
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user