summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormbkma <[email protected]>2019-04-23 20:32:55 +0200
committerPablo Barciela <[email protected]>2019-04-24 21:26:45 +0200
commitde580bfc5d8dfa5f734d8d152c9940a110ee65a8 (patch)
treed5f9061267988a0d9545d9e3533e7e3537a7072d
parente41acdb5cade8c0d8855dcfe583c3edd31b9b9bf (diff)
downloadmate-calc-de580bfc5d8dfa5f734d8d152c9940a110ee65a8.tar.bz2
mate-calc-de580bfc5d8dfa5f734d8d152c9940a110ee65a8.tar.xz
fixes issues 25 and 26
-rw-r--r--src/mp-serializer.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/mp-serializer.c b/src/mp-serializer.c
index 560aa64..2a5c3e3 100644
--- a/src/mp-serializer.c
+++ b/src/mp-serializer.c
@@ -352,14 +352,19 @@ mp_cast_to_exponential_string(MpSerializer *serializer, const MPNumber *x, gbool
gchar *
mp_serializer_to_string(MpSerializer *serializer, const MPNumber *x)
{
+ MPNumber cmp, xcmp;
gchar *s0;
int n_digits = 0;
-
+ mp_set_from_integer(10, &cmp);
+ mp_xpowy_integer(&cmp, -(serializer->priv->trailing_digits), &cmp);
+ mp_real_component(x, &xcmp);
+ mp_abs(&xcmp, &xcmp);
switch(serializer->priv->format) {
default:
case MP_DISPLAY_FORMAT_AUTOMATIC:
s0 = mp_cast_to_string(serializer, x, &n_digits);
- if (n_digits <= serializer->priv->leading_digits)
+ if ((n_digits <= serializer->priv->leading_digits &&
+ mp_is_greater_equal(&xcmp, &cmp)) || mp_is_complex(x))
return s0;
else {
g_free (s0);