better zero amount checking

This commit is contained in:
Simon Michael 2008-10-03 08:21:35 +00:00
parent cf194e6b60
commit 7db9c4c910
2 changed files with 12 additions and 8 deletions

View File

@ -60,12 +60,17 @@ showAmountRounded (Amount c q p) =
(symbol c) ++ ({-punctuatethousands $ -}printf ("%."++show p++"f") q)
showAmountRoundedOrZero :: Amount -> String
showAmountRoundedOrZero a@(Amount c _ _) =
let s = showAmountRounded a
noncurrency = drop (length $ symbol c)
nonnulls = filter (flip notElem "-+,.0")
iszero = (nonnulls $ noncurrency s) == ""
in if iszero then "0" else s
showAmountRoundedOrZero a
| isZeroAmount a = "0"
| otherwise = showAmountRounded a
-- | is this amount zero, when displayed with its given precision ?
isZeroAmount :: Amount -> Bool
isZeroAmount a@(Amount c _ _) = nonzerodigits == ""
where
nonzerodigits = filter (flip notElem "-+,.0") quantitystr
quantitystr = withoutcurrency $ showAmountRounded a
withoutcurrency = drop (length $ symbol c)
punctuatethousands :: String -> String
punctuatethousands s =

View File

@ -37,9 +37,8 @@ showEntryDescription e = (showDate $ edate e) ++ " " ++ (showDescription $ edesc
showDate d = printf "%-10s" d
showDescription s = printf "%-20s" (elideRight 20 s)
-- | quick & dirty: checks entry's 0 balance only to 8 places
isEntryBalanced :: Entry -> Bool
isEntryBalanced = ((0::Double)==) . read . printf "%0.8f" . quantity . sumLedgerTransactions . etransactions
isEntryBalanced = isZeroAmount . sumLedgerTransactions . etransactions
autofillEntry :: Entry -> Entry
autofillEntry e@(Entry _ _ _ _ _ ts _) =