fix float formatting

calib-gui
Ondřej Hruška 2 years ago
parent b6ccfd7019
commit f23f726b2d
  1. 22
      Lib/snprintf/snprintf.c

@ -655,6 +655,8 @@ static void fmtfp(char *buffer, size_t *currlen, size_t maxlen,
int zpadlen = 0;
int caps = 0;
int index;
int fzeropad = 0;
int fzerocnt = 0;
double intpart;
double fracpart;
double temp;
@ -728,6 +730,13 @@ static void fmtfp(char *buffer, size_t *currlen, size_t maxlen,
/* Convert fractional part */
if (fracpart) {
// leading zeros in the fractional part
fzeropad = 0;
fzerocnt = max - 1;
while (fracpart < POW10(fzerocnt)) {
fzeropad++;
fzerocnt--;
}
do {
temp = fracpart;
my_modf(fracpart * 0.1, &fracpart);
@ -785,9 +794,20 @@ static void fmtfp(char *buffer, size_t *currlen, size_t maxlen,
if (max > 0) {
dopr_outch(buffer, currlen, maxlen, '.');
while (fplace > 0)
if (zpadlen > fzeropad) {
zpadlen -= fzeropad;
} else {
zpadlen = 0;
}
while (fzeropad-- > 0) {
dopr_outch(buffer, currlen, maxlen, '0');
}
while (fplace > 0) {
dopr_outch(buffer, currlen, maxlen, fconvert[--fplace]);
}
}
while (zpadlen > 0) {
dopr_outch(buffer, currlen, maxlen, '0');

Loading…
Cancel
Save