X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata-out.c;h=2600ccb8037dfac35af8494b60b6c5b23a6eaa9f;hb=db5df54124af56dc1dfce71f839d78da2b49e346;hp=6439b607045f18e5566deec8a438b9197f88d03e;hpb=317e6b778833b5dcd5dd195c0b677835a8024b2a;p=pspp diff --git a/src/data-out.c b/src/data-out.c index 6439b60704..2600ccb803 100644 --- a/src/data-out.c +++ b/src/data-out.c @@ -34,6 +34,9 @@ #include "str.h" #include "var.h" +#include "gettext.h" +#define _(msgid) gettext (msgid) + #include "debug-print.h" /* Public functions. */ @@ -193,10 +196,7 @@ data_out (char *s, const struct fmt_spec *fp, const union value *v) void num_to_string (double v, char *s, int w, int d) { - struct fmt_spec f; - f.type = FMT_F; - f.w = w; - f.d = d; + struct fmt_spec f = make_output_format (FMT_F, w, d); convert_F (s, &f, v); } @@ -1045,7 +1045,7 @@ try_F (char *dst, const struct fmt_spec *fp, double number) /* There are no decimal places, so there's no way that the value can be shortened. Either it fits or it doesn't. */ - char buf[40]; + char buf[41]; sprintf (buf, "%*.0f", fp->w, number); if (strlen (buf) <= fp->w) { @@ -1119,6 +1119,7 @@ format_and_round (char *dst, double number, const struct fmt_spec *fp, sprintf (buf, "%.*f", decimals, number); + /* Omit integer part if it's 0. */ if (!memcmp (buf, "0.", 2)) memmove (buf, buf + 1, strlen (buf)); else if (!memcmp (buf, "-0.", 3)) @@ -1218,6 +1219,10 @@ format_and_round (char *dst, double number, const struct fmt_spec *fp, } } + /* Omit `-' if value output is zero. */ + if (buf[0] == '-' && buf[strspn (buf, "-.0")] == '\0') + memmove (buf, buf + 1, strlen (buf)); + buf_copy_str_lpad (dst, fp->w, buf); return 1; }