libdtoa: don't print trailing zeros if no decimal is printed

This commit is contained in:
Andrew Tridgell 2013-04-25 22:22:16 +10:00
parent ff7712ca3e
commit a153ee529f
1 changed files with 7 additions and 2 deletions

View File

@ -145,6 +145,7 @@ static void lib_dtoa(FAR struct lib_outstream_s *obj, int fmt, int prec,
int nchars; /* Number of characters to print */ int nchars; /* Number of characters to print */
int dsgn; /* Unused sign indicator */ int dsgn; /* Unused sign indicator */
int i; int i;
bool done_decimal_point = false;
/* special handling for NaN and Infinity */ /* special handling for NaN and Infinity */
if (isnan(value)) { if (isnan(value)) {
@ -199,6 +200,7 @@ static void lib_dtoa(FAR struct lib_outstream_s *obj, int fmt, int prec,
if (prec > 0 || IS_ALTFORM(flags)) if (prec > 0 || IS_ALTFORM(flags))
{ {
obj->put(obj, '.'); obj->put(obj, '.');
done_decimal_point = true;
/* Always print at least one digit to the right of the decimal point. */ /* Always print at least one digit to the right of the decimal point. */
@ -224,6 +226,7 @@ static void lib_dtoa(FAR struct lib_outstream_s *obj, int fmt, int prec,
/* Print the decimal point */ /* Print the decimal point */
obj->put(obj, '.'); obj->put(obj, '.');
done_decimal_point = true;
/* Print any leading zeros to the right of the decimal point */ /* Print any leading zeros to the right of the decimal point */
@ -270,6 +273,7 @@ static void lib_dtoa(FAR struct lib_outstream_s *obj, int fmt, int prec,
/* Print the decimal point */ /* Print the decimal point */
obj->put(obj, '.'); obj->put(obj, '.');
done_decimal_point = true;
/* Always print at least one digit to the right of the decimal /* Always print at least one digit to the right of the decimal
* point. * point.
@ -306,8 +310,9 @@ static void lib_dtoa(FAR struct lib_outstream_s *obj, int fmt, int prec,
} }
/* Finally, print any trailing zeroes */ /* Finally, print any trailing zeroes */
if (done_decimal_point) {
zeroes(obj, prec); zeroes(obj, prec);
}
/* Is this memory supposed to be freed or not? */ /* Is this memory supposed to be freed or not? */