I don't mind excessive decimal points in my bookkeeping but I'd like to be
able to render reports and control the reported precision there.  So I
implemented __round__() on Amount, and added Amount to the signature of the
bean-query round() function in query_env.py (happy to offer PRs after I am
sure it's correct).

The round() function now works for me in bean-query, and some debugging
confirms that internally the Amount number gets rounded, but for some
reason the DisplayContext still seems to get the idea my numbers have lots
of points of precision.  If I wrap the round() with a str() to force an
early conversion to a string, one can see that the numbers have been
rounded as expected.  Compare:

beanquery> SELECT date, maxwidth(narration, 20), account, 10,
round(cost(position), 4) as amount FROM has_account("PnL") AND year(date) =
2021 WHERE account="Income:PnL" AND abs(number) < 100 limit 5
   date     maxwidth(narration   account    10               amount

----------  ------------------  ----------  --
 --------------------------------
2021-05-10  Send 0.0001 XCH     Income:PnL  10
 -0.1000000000000000000000000 USD
2021-08-31  Fees for Buy [...]  Income:PnL  10
5.3300000000000000000000000 USD
2021-08-31  Fees for Buy [...]  Income:PnL  10
5.3300000000000000000000000 USD
2021-08-31  Fees for Buy [...]  Income:PnL  10
7.4600000000000000000000000 USD
2021-09-03  Fees for Buy [...]  Income:PnL  10
1.6800000000000000000000000 USD

beanquery> SELECT date, maxwidth(narration, 20), account, 10,
*str(*round(cost(position),
4)*)* as amount FROM has_account("PnL") AND year(date) = 2021 WHERE
account="Income:PnL" AND abs(number) < 100 limit 5
   date     maxwidth(narration   account    10     amount
----------  ------------------  ----------  --  -----------
2021-05-10  Send 0.0001 XCH     Income:PnL  10  -0.1000 USD
2021-08-31  Fees for Buy [...]  Income:PnL  10  5.3300 USD
2021-08-31  Fees for Buy [...]  Income:PnL  10  5.3300 USD
2021-08-31  Fees for Buy [...]  Income:PnL  10  7.4600 USD
2021-09-03  Fees for Buy [...]  Income:PnL  10  1.6800 USD

I've dug around the DisplayContext updating code and can't figure out
what's going on.  Any ideas?

eric

-- 
You received this message because you are subscribed to the Google Groups 
"Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beancount/CAFXPr0tBh045-Cs5HuzVLauSd5u%3D7d_sGHKcTVnEuE0QHAMTWg%40mail.gmail.com.

Reply via email to