Skip to content

Commit aa70ef3

Browse files
modify to output "number_in_words and nn/denom"
1 parent 16f1a80 commit aa70ef3

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

libgnucash/app-utils/gnc-ui-util.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@
4545
#include <unicode/listformatter.h>
4646
#include <unicode/rbnf.h>
4747

48+
#include <numeric>
49+
4850
#include "qof.h"
4951
#include "gnc-prefs.h"
5052
#include "Account.h"
@@ -1498,26 +1500,33 @@ gnc_wrap_text_with_bidi_ltr_isolate (const char* text)
14981500
********************************************************************/
14991501

15001502
static std::string
1501-
number_to_words(double val)
1503+
number_to_words(double val, int64_t denom)
15021504
{
15031505
UErrorCode status{U_ZERO_ERROR};
15041506
icu::RuleBasedNumberFormat formatter{icu::URBNF_SPELLOUT, icu::Locale{}, status};
15051507
icu::UnicodeString result;
15061508
std::string words;
1509+
double int_part;
15071510
if (U_FAILURE(status))
15081511
{
15091512
PERR("Error creating formatter: %s", u_errorName(status));
15101513
return "";
15111514
}
15121515

1513-
formatter.format (std::fabs(val), result, status);
1516+
const int frac_part = std::round(std::modf (std::fabs(val), &int_part) * denom);
1517+
const std::vector<std::string> tail =
1518+
{ " ", _("and"), " ", std::to_string (frac_part), "/", std::to_string (denom) };
1519+
1520+
formatter.format (int_part, result, status);
15141521
if (U_FAILURE(status))
15151522
{
15161523
PERR("Error formatting number: %s", u_errorName(status));
15171524
return "";
15181525
}
15191526

15201527
result.toUTF8String(words);
1528+
1529+
words = std::accumulate (tail.begin(), tail.end(), words);
15211530
DEBUG ("Number %f in words: %s", val, words.c_str());
15221531

15231532
return words;
@@ -1534,7 +1543,7 @@ static double round(double x)
15341543
char*
15351544
numeric_to_words(gnc_numeric val)
15361545
{
1537-
return g_strdup(number_to_words (gnc_numeric_to_double(val)).c_str());
1546+
return g_strdup(number_to_words (gnc_numeric_to_double(val), gnc_numeric_denom(val)).c_str());
15381547
}
15391548

15401549
const char*

0 commit comments

Comments
 (0)