display thousands with commas when appropriate
This commit is contained in:
		
							parent
							
								
									aac492c746
								
							
						
					
					
						commit
						3dc5f54f39
					
				| @ -56,8 +56,18 @@ showAmount (Amount (Commodity {symbol=sym,side=side,spaced=spaced,precision=p}) | ||||
|     | side==R = printf "%s%s%s" quantity space sym | ||||
|     where  | ||||
|       space = if spaced then " " else "" | ||||
|       quantity = punctuatethousands $ printf ("%."++show p++"f") q :: String | ||||
|       punctuatethousands = id | ||||
|       quantity = punctuatethousands $ printf ("%."++show p++"f") q | ||||
| 
 | ||||
| -- | Add thousands-separating commas to a decimal number string | ||||
| punctuatethousands :: String -> String | ||||
| punctuatethousands s = | ||||
|     sign ++ (addcommas int) ++ frac | ||||
|     where  | ||||
|       (sign,num) = break isDigit s | ||||
|       (int,frac) = break (=='.') num | ||||
|       addcommas = reverse . concat . intersperse "," . triples . reverse | ||||
|       triples [] = [] | ||||
|       triples l  = [take 3 l] ++ (triples $ drop 3 l) | ||||
| 
 | ||||
| -- | Get the string representation of an amount, rounded, or showing just "0" if it's zero. | ||||
| showAmountOrZero :: Amount -> String | ||||
| @ -73,16 +83,6 @@ isZeroAmount a@(Amount c _ ) = nonzerodigits == "" | ||||
|       quantitystr = withoutsymbol $ showAmount a | ||||
|       withoutsymbol = drop (length $ symbol c) -- XXX | ||||
| 
 | ||||
| punctuatethousands :: String -> String | ||||
| punctuatethousands s = | ||||
|     sign ++ (punctuate int) ++ frac | ||||
|     where  | ||||
|       (sign,num) = break isDigit s | ||||
|       (int,frac) = break (=='.') num | ||||
|       punctuate = reverse . concat . intersperse "," . triples . reverse | ||||
|       triples "" = [] | ||||
|       triples s = [take 3 s] ++ (triples $ drop 3 s) | ||||
| 
 | ||||
| instance Num Amount where | ||||
|     abs (Amount c q) = Amount c (abs q) | ||||
|     signum (Amount c q) = Amount c (signum q) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user