diff options
| -rw-r--r-- | src/mp-serializer.c | 9 | 
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); | 
