summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-02-26 09:17:22 +0000
committerDamien George <damien.p.george@gmail.com>2014-02-26 09:17:22 +0000
commite70700851a2ec2d08d76fdded592dc833e21252c (patch)
treea9540718e701f6a8fce536f00909cdcb6cbf6ee1
parentaca141269e11336ec0603748414f08b26d020c5f (diff)
parent49b5533000f87f000e080a634f173046c3d9dbe3 (diff)
downloadmicropython-e70700851a2ec2d08d76fdded592dc833e21252c.tar.gz
micropython-e70700851a2ec2d08d76fdded592dc833e21252c.zip
Merge pull request #323 from dhylands/fix-float-print
Fix floating point printing of negative numbers in the range (0, -1.0)
-rw-r--r--stm/printf.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/stm/printf.c b/stm/printf.c
index 7bac07ab72..cfe4204b61 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: