gnucash stable: Redo 71afa3e0 and 71afa3e0 so powten(max_leg_digits) is 1e18

Mike Alexander mta at code.gnucash.org
Tue May 23 17:48:39 EDT 2023


Updated	 via  https://github.com/Gnucash/gnucash/commit/6bdaa161 (commit)
	from  https://github.com/Gnucash/gnucash/commit/369b0855 (commit)



commit 6bdaa161eb05597d949df321a100482e86a866eb
Author: Mike Alexander <mta at umich.edu>
Date:   Mon May 22 15:24:26 2023 -0400

    Redo 71afa3e0 and 71afa3e0 so powten(max_leg_digits) is 1e18
    
    This is what it was before 71afa3e0.  This is the largest power of
    ten that fits in an int64.

diff --git a/libgnucash/engine/gnc-numeric.cpp b/libgnucash/engine/gnc-numeric.cpp
index 163776a449..ce60749249 100644
--- a/libgnucash/engine/gnc-numeric.cpp
+++ b/libgnucash/engine/gnc-numeric.cpp
@@ -42,7 +42,7 @@
 
 static QofLogModule log_module = "qof";
 
-static const uint8_t max_leg_digits{17};
+static const uint8_t max_leg_digits{18};
 static const int64_t pten[] = { 1, 10, 100, 1000, 10000, 100000, 1000000,
                                10000000, 100000000, 1000000000,
                                INT64_C(10000000000), INT64_C(100000000000),
@@ -50,7 +50,8 @@ static const int64_t pten[] = { 1, 10, 100, 1000, 10000, 100000, 1000000,
                                INT64_C(100000000000000),
                                INT64_C(1000000000000000),
                                INT64_C(10000000000000000),
-                               INT64_C(100000000000000000)};
+                               INT64_C(100000000000000000),
+                               INT64_C(1000000000000000000)};
 #define POWTEN_OVERFLOW -5
 
 int64_t
@@ -79,7 +80,7 @@ GncNumeric::GncNumeric(GncRational rr)
 
 GncNumeric::GncNumeric(double d) : m_num(0), m_den(1)
 {
-    static uint64_t max_leg_value{INT64_C(100000000000000000)};
+    static uint64_t max_leg_value{INT64_C(1000000000000000000)};
     if (std::isnan(d) || fabs(d) > max_leg_value)
     {
         std::ostringstream msg;
diff --git a/libgnucash/engine/test/gtest-gnc-numeric.cpp b/libgnucash/engine/test/gtest-gnc-numeric.cpp
index 27b386748b..1eaf5b328c 100644
--- a/libgnucash/engine/test/gtest-gnc-numeric.cpp
+++ b/libgnucash/engine/test/gtest-gnc-numeric.cpp
@@ -185,12 +185,12 @@ TEST(gncnumeric_constructors, test_string_constructor)
     GncNumeric neg_decimal_frac_nozero("-.12345");
     EXPECT_EQ(-12345, neg_decimal_frac_nozero.num());
     EXPECT_EQ(100000, neg_decimal_frac_nozero.denom());
-    GncNumeric big_denom(".12345678901234567");
-    EXPECT_EQ(12345678901234567, big_denom.num());
-    EXPECT_EQ(100000000000000000, big_denom.denom());
-    GncNumeric too_big_denom(".123456789012345678");
-    EXPECT_EQ(12345678901234567, too_big_denom.num());
-    EXPECT_EQ(100000000000000000, too_big_denom.denom());
+    GncNumeric big_denom(".123456789012345678");
+    EXPECT_EQ(123456789012345678, big_denom.num());
+    EXPECT_EQ(1000000000000000000, big_denom.denom());
+    GncNumeric too_big_denom(".1234567890123456789");
+    EXPECT_EQ(123456789012345678, too_big_denom.num());
+    EXPECT_EQ(1000000000000000000, too_big_denom.denom());
 }
 
 TEST(gncnumeric_output, string_output)



Summary of changes:
 libgnucash/engine/gnc-numeric.cpp            |  7 ++++---
 libgnucash/engine/test/gtest-gnc-numeric.cpp | 12 ++++++------
 2 files changed, 10 insertions(+), 9 deletions(-)



More information about the gnucash-changes mailing list