4585
4585
if (remove_trailing_zeroes)
4590
4590
/* Using %g or %G: remove superfluous zeroes. */
4591
4591
if (fmt_spec == 'f')
4592
p = tmp + str_arg_l - 1;
4592
tp = tmp + str_arg_l - 1;
4595
p = (char *)vim_strchr((char_u *)tmp,
4595
tp = (char *)vim_strchr((char_u *)tmp,
4596
4596
fmt_spec == 'e' ? 'e' : 'E');
4599
4599
/* Remove superfluous '+' and leading
4600
4600
* zeroes from the exponent. */
4603
4603
/* Change "1.0e+07" to "1.0e07" */
4604
STRMOVE(p + 1, p + 2);
4604
STRMOVE(tp + 1, tp + 2);
4607
i = (p[1] == '-') ? 2 : 1;
4607
i = (tp[1] == '-') ? 2 : 1;
4608
while (tp[i] == '0')
4610
4610
/* Change "1.0e07" to "1.0e7" */
4611
STRMOVE(p + i, p + i + 1);
4611
STRMOVE(tp + i, tp + i + 1);
4618
if (p != NULL && !precision_specified)
4618
if (tp != NULL && !precision_specified)
4619
4619
/* Remove trailing zeroes, but keep the one
4620
4620
* just after a dot. */
4621
while (p > tmp + 2 && *p == '0' && p[-1] != '.')
4621
while (tp > tmp + 2 && *tp == '0'
4624
STRMOVE(tp, tp + 1);
4632
4633
/* Be consistent: some printf("%e") use 1.0e+12
4633
4634
* and some 1.0e+012. Remove one zero in the last
4635
p = (char *)vim_strchr((char_u *)tmp,
4636
tp = (char *)vim_strchr((char_u *)tmp,
4636
4637
fmt_spec == 'e' ? 'e' : 'E');
4637
if (p != NULL && (p[1] == '+' || p[1] == '-')
4639
&& vim_isdigit(p[3])
4640
&& vim_isdigit(p[4]))
4638
if (tp != NULL && (tp[1] == '+' || tp[1] == '-')
4640
&& vim_isdigit(tp[3])
4641
&& vim_isdigit(tp[4]))
4642
STRMOVE(p + 2, p + 3);
4643
STRMOVE(tp + 2, tp + 3);