From e6dae78c033ea970a459b1a0ccc2f1310d1bff96 Mon Sep 17 00:00:00 2001 From: Max Nikulin Date: Mon, 8 Jul 2024 17:17:30 +0700 Subject: Fix denominator of roundto result Multiprecision rational created from a double value may have large power of 2 denominator since fractional decimal numbers can not be represented as binary floating point numbers. It leads to failed assertion when result is compared to a value converted directly from strings. Use integer multiprecision arithmetics to round numbers to ensure proper denominator. Inspired by python gmpy2 package The change makes `roundto` symmetric for positive/negative arguments. Halves are rounded to nearest even. Rounded away from zero are discussed in #1663 and it may be achieved with minimal modification. - See #2329 - Closes #1983 --- doc/ledger3.texi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc/ledger3.texi') diff --git a/doc/ledger3.texi b/doc/ledger3.texi index e9cadefb..02680caa 100644 --- a/doc/ledger3.texi +++ b/doc/ledger3.texi @@ -8660,7 +8660,7 @@ $ ledger -f expr.dat --format "%(account) %(roundto(amount, 1))\n" reg @end smallexample @smallexample @c output:B4DFB9F Assets:Cash ¤ -123,40 -Expenses:Office Supplies ¤ 123,50 +Expenses:Office Supplies ¤ 123,40 @end smallexample @end defun -- cgit v1.2.3