py/formatfloat: Handle calculation of integer digit for %f format properly.
%f prints true integer digit, so its calculation should happen before any exponential scaling.
This commit is contained in:
parent
3c4c069802
commit
3d6240ba1b
|
@ -170,6 +170,15 @@ int mp_format_float(FPTYPE f, char *buf, size_t buf_size, char fmt, int prec, ch
|
||||||
num_digits = prec + 1;
|
num_digits = prec + 1;
|
||||||
}
|
}
|
||||||
} else if (fp_isless1(f)) {
|
} else if (fp_isless1(f)) {
|
||||||
|
// We need to figure out what an integer digit will be used
|
||||||
|
// in case 'f' is used (or we revert other format to it below).
|
||||||
|
// As we just tested number to be <1, this is obviously 0,
|
||||||
|
// but we can round it up to 1 below.
|
||||||
|
char first_dig = '0';
|
||||||
|
if (f >= FPROUND_TO_ONE) {
|
||||||
|
first_dig = '1';
|
||||||
|
}
|
||||||
|
|
||||||
// Build negative exponent
|
// Build negative exponent
|
||||||
for (e = 0, e1 = FPDECEXP; e1; e1 >>= 1, pos_pow++, neg_pow++) {
|
for (e = 0, e1 = FPDECEXP; e1; e1 >>= 1, pos_pow++, neg_pow++) {
|
||||||
if (*neg_pow > f) {
|
if (*neg_pow > f) {
|
||||||
|
@ -177,14 +186,9 @@ int mp_format_float(FPTYPE f, char *buf, size_t buf_size, char fmt, int prec, ch
|
||||||
f *= *pos_pow;
|
f *= *pos_pow;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
char first_dig = '0';
|
|
||||||
char e_sign_char = '-';
|
char e_sign_char = '-';
|
||||||
if (fp_isless1(f) && f >= FPROUND_TO_ONE) {
|
if (fp_isless1(f) && f >= FPROUND_TO_ONE) {
|
||||||
f = FPCONST(1.0);
|
f = FPCONST(1.0);
|
||||||
if (e > 1) {
|
|
||||||
// numbers less than 1.0 start with 0.xxx
|
|
||||||
first_dig = '1';
|
|
||||||
}
|
|
||||||
if (e == 0) {
|
if (e == 0) {
|
||||||
e_sign_char = '+';
|
e_sign_char = '+';
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue