summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Hylands <dhylands@gmail.com>2015-04-12 00:36:00 -0700
committerDamien George <damien.p.george@gmail.com>2015-04-12 13:06:20 +0100
commitb21786947fabbdef76824d899263bec51779738b (patch)
tree4679c40d889d73e2837a4f13cabed5cdfaf5ed5a
parent8b7faa31e1a98fd582db7021152fa25da69635e0 (diff)
py/formatfloat.c: Fix format of floating point numbers near 1.0.
In particular, numbers which are less than 1.0 but which round up to 1.0. This also makes those numbers which round up to 1.0 to print with e+00 rather than e-00 for those formats which print exponents. Addresses issue #1178.
-rw-r--r--py/formatfloat.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/py/formatfloat.c b/py/formatfloat.c
index e73215a7a..64f013147 100644
--- a/py/formatfloat.c
+++ b/py/formatfloat.c
@@ -142,8 +142,14 @@ int mp_format_float(float f, char *buf, size_t buf_size, char fmt, int prec, cha
num.f *= *pos_pow;
}
}
+ char first_dig = '0';
+ char e_sign_char = '-';
if (num.f < 1.0F && num.f >= 0.9999995F) {
num.f = 1.0F;
+ first_dig = '1';
+ if (e == 0) {
+ e_sign_char = '+';
+ }
} else {
e++;
num.f *= 10.0F;
@@ -155,7 +161,7 @@ int mp_format_float(float f, char *buf, size_t buf_size, char fmt, int prec, cha
if (fmt == 'f' || (fmt == 'g' && e <= 4)) {
fmt = 'f';
dec = -1;
- *s++ = '0';
+ *s++ = first_dig;
if (prec + e + 1 > buf_remaining) {
prec = buf_remaining - e - 1;
@@ -175,7 +181,7 @@ int mp_format_float(float f, char *buf, size_t buf_size, char fmt, int prec, cha
} else {
// For e & g formats, we'll be printing the exponent, so set the
// sign.
- e_sign = '-';
+ e_sign = e_sign_char;
dec = 0;
if (prec > (buf_remaining - 6)) {