diff options
Diffstat (limited to 'platform/utilities/src/print_scan.c')
-rw-r--r-- | platform/utilities/src/print_scan.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/platform/utilities/src/print_scan.c b/platform/utilities/src/print_scan.c index 01667af..6c09099 100644 --- a/platform/utilities/src/print_scan.c +++ b/platform/utilities/src/print_scan.c @@ -756,7 +756,7 @@ static int32_t mkfloatnumstr (char *numstr, void *nump, int32_t radix, uint32_t for (i = 0; i < precision_width; i++) { fb = fa / (int32_t)radix; - c = (int32_t)(fa - (uint64_t)fb * (int32_t)radix); + c = (int32_t)(fa - (int64_t)fb * (int32_t)radix); if (c < 0) { c = ~c + 1 + '0'; @@ -771,20 +771,28 @@ static int32_t mkfloatnumstr (char *numstr, void *nump, int32_t radix, uint32_t *nstrp++ = (char)'.'; ++nlen; a = (int32_t)intpart; - while (a != 0) + if(a == 0) { - b = (int32_t)a / (int32_t)radix; - c = (int32_t)a - ((int32_t)b * (int32_t)radix); - if (c < 0) - { - c = ~c + 1 + '0'; - }else + *nstrp++ = '0'; + ++nlen; + } + else + { + while (a != 0) { - c = c + '0'; + b = (int32_t)a / (int32_t)radix; + c = (int32_t)a - ((int32_t)b * (int32_t)radix); + if (c < 0) + { + c = ~c + 1 + '0'; + }else + { + c = c + '0'; + } + a = b; + *nstrp++ = (char)c; + ++nlen; } - a = b; - *nstrp++ = (char)c; - ++nlen; } done: return nlen; |