diff options
author | Dave Hylands <dhylands@gmail.com> | 2014-02-25 15:11:17 -0800 |
---|---|---|
committer | Dave Hylands <dhylands@gmail.com> | 2014-02-25 15:24:25 -0800 |
commit | 49b5533000f87f000e080a634f173046c3d9dbe3 (patch) | |
tree | a9540718e701f6a8fce536f00909cdcb6cbf6ee1 /stm/printf.c | |
parent | aca141269e11336ec0603748414f08b26d020c5f (diff) |
Fix floating point printing of negative numbers in the range (0, -1.0)
Diffstat (limited to 'stm/printf.c')
-rw-r--r-- | stm/printf.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/stm/printf.c b/stm/printf.c index 7bac07ab7..cfe4204b6 100644 --- a/stm/printf.c +++ b/stm/printf.c @@ -219,9 +219,19 @@ int pfenv_printf(const pfenv_t *pfenv, const char *fmt, va_list args) { mp_float_t d = va_arg(args, double); int left = (int)d; int right = (int)((d - (mp_float_t)(int)d) * 1000000.0); - chrs += pfenv_print_int(pfenv, left, 1, 10, 'a', flags, width); - chrs += pfenv_print_strn(pfenv, &dot, 1, flags, width); - chrs += pfenv_print_int(pfenv, right, 0, 10, 'a', PF_FLAG_ZERO_PAD, 6); + if (right < 0) { + if (left == 0) { + chrs += pfenv_print_strn(pfenv, "-0", 2, flags, width); + } else { + chrs += pfenv_print_int(pfenv, left, 1, 10, 'a', flags, width); + } + chrs += pfenv_print_strn(pfenv, &dot, 1, flags, width); + chrs += pfenv_print_int(pfenv, -right, 0, 10, 'a', PF_FLAG_ZERO_PAD, 6); + } else { + chrs += pfenv_print_int(pfenv, left, 1, 10, 'a', flags, width); + chrs += pfenv_print_strn(pfenv, &dot, 1, flags, width); + chrs += pfenv_print_int(pfenv, right, 0, 10, 'a', PF_FLAG_ZERO_PAD, 6); + } break; } default: |