mirror of
https://github.com/simonmichael/hledger.git
synced 2024-11-08 07:09:28 +03:00
closes simonmichael/hledger#704
This commit is contained in:
parent
a8dc474a27
commit
b377bff90a
@ -21,6 +21,7 @@ where
|
||||
--- * imports
|
||||
import Prelude ()
|
||||
import Prelude.Compat hiding (readFile)
|
||||
import Control.Arrow ((***))
|
||||
import Control.Monad.Compat
|
||||
import Control.Monad.Except (ExceptT(..), runExceptT, throwError) --, catchError)
|
||||
import Control.Monad.State.Strict
|
||||
@ -464,10 +465,12 @@ rightsymbolamountp = do
|
||||
m <- lift multiplierp
|
||||
sign <- lift signp
|
||||
rawnum <- lift $ rawnumberp
|
||||
expMod <- lift . option id $ try exponentp
|
||||
commodityspaced <- lift $ skipMany' spacenonewline
|
||||
c <- lift commoditysymbolp
|
||||
suggestedStyle <- getAmountStyle c
|
||||
let (q,prec,mdec,mgrps) = fromRawNumber suggestedStyle (sign == "-") rawnum
|
||||
let (q0,prec0,mdec,mgrps) = fromRawNumber suggestedStyle (sign == "-") rawnum
|
||||
(q, prec) = expMod (q0, prec0)
|
||||
p <- priceamountp
|
||||
let s = amountstyle{ascommodityside=R, ascommodityspaced=commodityspaced, asprecision=prec, asdecimalpoint=mdec, asdigitgroups=mgrps}
|
||||
return $ Amount c q p s m
|
||||
@ -572,9 +575,20 @@ numberp suggestedStyle = do
|
||||
sign <- signp
|
||||
raw <- rawnumberp
|
||||
dbg8 "numberp parsed" raw `seq` return ()
|
||||
return $ dbg8 "numberp quantity,precision,mdecimalpoint,mgrps" (fromRawNumber suggestedStyle (sign == "-") raw)
|
||||
let num@(q, prec, decSep, groups) = dbg8 "numberp quantity,precision,mdecimalpoint,mgrps" (fromRawNumber suggestedStyle (sign == "-") raw)
|
||||
option num . try $ do
|
||||
when (isJust groups) $ fail "groups and exponent are not mixable"
|
||||
(q', prec') <- exponentp <*> pure (q, prec)
|
||||
return (q', prec', decSep, groups)
|
||||
<?> "numberp"
|
||||
|
||||
exponentp :: TextParser m ((Quantity, Int) -> (Quantity, Int))
|
||||
exponentp = do
|
||||
char' 'e'
|
||||
exp <- liftM read $ (++) <$> signp <*> some digitChar
|
||||
return $ (* 10^^exp) *** (0 `max`) . (+ (-exp))
|
||||
<?> "exponentp"
|
||||
|
||||
fromRawNumber :: Maybe AmountStyle -> Bool -> (Maybe Char, [String], Maybe (Char, String)) -> (Quantity, Int, Maybe Char, Maybe DigitGroupStyle)
|
||||
fromRawNumber suggestedStyle negated raw = (quantity, precision, mdecimalpoint, mgrps) where
|
||||
-- unpack with a hint if useful
|
||||
|
98
tests/journal/scientific.test
Normal file
98
tests/journal/scientific.test
Normal file
@ -0,0 +1,98 @@
|
||||
# just check
|
||||
hledger -f - bal --no-total
|
||||
<<<
|
||||
D $1,000.00
|
||||
|
||||
2018/1/1
|
||||
(a) 2.3
|
||||
>>>
|
||||
$2.30 a
|
||||
>>>=0
|
||||
|
||||
# some basic cases with commodity
|
||||
hledger -f - bal --no-total
|
||||
<<<
|
||||
commodity $1,000.00000000
|
||||
|
||||
2018/1/1
|
||||
a $1.05e2
|
||||
b $31415926e-7
|
||||
c $1E+3
|
||||
d
|
||||
>>>
|
||||
$105.00000000 a
|
||||
$3.14159260 b
|
||||
$1,000.00000000 c
|
||||
$-1,108.14159260 d
|
||||
>>>=0
|
||||
|
||||
# some basic cases with commodity
|
||||
hledger -f - print --explicit
|
||||
<<<
|
||||
commodity $1,000.00000000
|
||||
|
||||
2018/1/1
|
||||
a $1.05e2
|
||||
b $31415926e-7
|
||||
c $1E+3
|
||||
d
|
||||
>>>
|
||||
2018/01/01
|
||||
a $105.00000000
|
||||
b $3.14159260
|
||||
c $1,000.00000000
|
||||
d $-1,108.14159260
|
||||
|
||||
>>>=0
|
||||
#
|
||||
# some basic cases
|
||||
hledger -f - bal --no-total
|
||||
<<<
|
||||
2018/1/1
|
||||
a 1.05e2
|
||||
b 31415926e-7
|
||||
c 1E+3
|
||||
d
|
||||
>>>
|
||||
105.0000000 a
|
||||
3.1415926 b
|
||||
1000.0000000 c
|
||||
-1108.1415926 d
|
||||
>>>2
|
||||
>>>=0
|
||||
|
||||
# some strang effect of default
|
||||
hledger -f - bal --no-total
|
||||
<<<
|
||||
D $1,000.00
|
||||
|
||||
2018/1/1
|
||||
a 1.050000e2
|
||||
b 31415926e-7
|
||||
c 1E+3
|
||||
d
|
||||
>>>
|
||||
$105.0000000 a
|
||||
$3.1415926 b
|
||||
$1,000.0000000 c
|
||||
$-1,108.1415926 d
|
||||
>>>2
|
||||
>>>=0
|
||||
|
||||
# we still should recognize commodities with e
|
||||
hledger -f - bal --no-total
|
||||
<<<
|
||||
2018/1/1
|
||||
(a) 1.00005e
|
||||
(a) 2.00003E
|
||||
>>>
|
||||
2.00003E
|
||||
1.00005e a
|
||||
>>>=0
|
||||
|
||||
hledger -f - reg
|
||||
<<<
|
||||
2018/1/1
|
||||
(a) 1,000.5e-1
|
||||
>>>
|
||||
>>>=1
|
Loading…
Reference in New Issue
Block a user