diff --git a/libgnucash/app-utils/gnc-ui-util.c b/libgnucash/app-utils/gnc-ui-util.c index aea6bbba3a..5bcb8eb638 100644 --- a/libgnucash/app-utils/gnc-ui-util.c +++ b/libgnucash/app-utils/gnc-ui-util.c @@ -2061,6 +2061,14 @@ multiplier (int num_decimals) { switch (num_decimals) { + case 12: + return 1000000000000; + case 11: + return 100000000000; + case 10: + return 10000000000; + case 9: + return 1000000000; case 8: return 100000000; case 7: @@ -2077,6 +2085,8 @@ multiplier (int num_decimals) return 100; case 1: return 10; + case 0: + return 1; default: PERR("bad fraction length"); g_assert_not_reached(); @@ -2374,10 +2384,10 @@ xaccParseAmountExtended (const char * in_str, gboolean monetary, len = strlen(out_str); - if (len > 8) + if (len > 12) { - out_str[8] = '\0'; - len = 8; + out_str[12] = '\0'; + len = 12; } if (sscanf (out_str, QOF_SCANF_LLD, &fraction) < 1) @@ -2392,7 +2402,7 @@ xaccParseAmountExtended (const char * in_str, gboolean monetary, } else if (monetary && auto_decimal_enabled && !got_decimal) { - if ((auto_decimal_places > 0) && (auto_decimal_places < 9)) + if ((auto_decimal_places > 0) && (auto_decimal_places <= 12)) { denom = multiplier(auto_decimal_places);