X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-val-chooser.c;h=c2c273542cbb7c7872dd3b67f92027d01cc30782;hb=9021515cfa1489f9cd37e7440807bdd1d40de37a;hp=01d694e27e7e2fc98808488e27d0c603aecbe05e;hpb=fa1fffd5c789d9c7875fc3bdf556eaf017cf524e;p=pspp diff --git a/src/ui/gui/psppire-val-chooser.c b/src/ui/gui/psppire-val-chooser.c index 01d694e27e..c2c273542c 100644 --- a/src/ui/gui/psppire-val-chooser.c +++ b/src/ui/gui/psppire-val-chooser.c @@ -1,5 +1,5 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2011 Free Software Foundation + Copyright (C) 2011, 2014 Free Software Foundation This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,6 +16,7 @@ #include +#include #include #include "dialog-common.h" #include "psppire-val-chooser.h" @@ -452,7 +453,7 @@ old_value_to_string (const GValue *src, GValue *dest) { case OV_NUMERIC: { - gchar *text = g_strdup_printf ("%g", ov->v.v); + gchar *text = g_strdup_printf ("%.*g", DBL_DIG + 1, ov->v.v); g_value_set_string (dest, text); g_free (text); } @@ -476,10 +477,10 @@ old_value_to_string (const GValue *src, GValue *dest) g_unichar_to_utf8 (0x2013, en_dash); - text = g_strdup_printf ("%g %s %g", - ov->v.range[0], - en_dash, - ov->v.range[1]); + text = g_strdup_printf ("%.*g %s %.*g", + DBL_DIG + 1, ov->v.range[0], + en_dash, + DBL_DIG + 1, ov->v.range[1]); g_value_set_string (dest, text); g_free (text); } @@ -491,9 +492,9 @@ old_value_to_string (const GValue *src, GValue *dest) g_unichar_to_utf8 (0x2013, en_dash); - text = g_strdup_printf ("LOWEST %s %g", + text = g_strdup_printf ("LOWEST %s %.*g", en_dash, - ov->v.range[1]); + DBL_DIG + 1, ov->v.range[1]); g_value_set_string (dest, text); g_free (text); @@ -506,8 +507,8 @@ old_value_to_string (const GValue *src, GValue *dest) g_unichar_to_utf8 (0x2013, en_dash); - text = g_strdup_printf ("%g %s HIGHEST", - ov->v.range[0], + text = g_strdup_printf ("%.*g %s HIGHEST", + DBL_DIG + 1, ov->v.range[0], en_dash); g_value_set_string (dest, text); @@ -543,46 +544,46 @@ old_value_get_type (void) /* Generate a syntax fragment for NV and append it to STR */ void -old_value_append_syntax (GString *str, const struct old_value *ov) +old_value_append_syntax (struct string *str, const struct old_value *ov) { switch (ov->type) { case OV_NUMERIC: - g_string_append_printf (str, "%g", ov->v.v); + ds_put_c_format (str, "%.*g", DBL_DIG + 1, ov->v.v); break; case OV_STRING: { struct string ds = DS_EMPTY_INITIALIZER; syntax_gen_string (&ds, ss_cstr (ov->v.s)); - g_string_append (str, ds_cstr (&ds)); + ds_put_cstr (str, ds_cstr (&ds)); ds_destroy (&ds); } break; case OV_MISSING: - g_string_append (str, "MISSING"); + ds_put_cstr (str, "MISSING"); break; case OV_SYSMIS: - g_string_append (str, "SYSMIS"); + ds_put_cstr (str, "SYSMIS"); break; case OV_ELSE: - g_string_append (str, "ELSE"); + ds_put_cstr (str, "ELSE"); break; case OV_RANGE: - g_string_append_printf (str, "%g THRU %g", - ov->v.range[0], - ov->v.range[1]); + ds_put_c_format (str, "%.*g THRU %.*g", + DBL_DIG + 1, ov->v.range[0], + DBL_DIG + 1, ov->v.range[1]); break; case OV_LOW_UP: - g_string_append_printf (str, "LOWEST THRU %g", - ov->v.range[1]); + ds_put_c_format (str, "LOWEST THRU %*gg", + DBL_DIG + 1, ov->v.range[1]); break; case OV_HIGH_DOWN: - g_string_append_printf (str, "%g THRU HIGHEST", - ov->v.range[0]); + ds_put_c_format (str, "%.*g THRU HIGHEST", + DBL_DIG + 1, ov->v.range[0]); break; default: g_warning ("Invalid type in old recode value"); - g_string_append (str, "???"); + ds_put_cstr (str, "???"); break; }; } @@ -612,7 +613,7 @@ psppire_val_chooser_get_status (PsppireValChooser *vr, struct old_value *ov) static gchar * num_to_string (gdouble x) { - return g_strdup_printf ("%g", x); + return g_strdup_printf ("%.*g", DBL_DIG + 1, x); }