gnumeric r17007 - in trunk: . src



Author: mortenw
Date: Sat Dec 13 18:03:07 2008
New Revision: 17007
URL: http://svn.gnome.org/viewvc/gnumeric?rev=17007&view=rev

Log:
2008-12-13  Morten Welinder  <terra gnome org>

	* src/parse-util.c (gnm_conventions_new_full): Default value
	GNM_DIG for new field output.decimal_digits.

	* src/value.c (value_get_as_gstring): Use number of digits from
	output.decimal_digits.

	* src/xml-sax-write.c (gnm_xml_io_conventions): Increase the
	number of decimal digits used for output to avoid rounding errors
	and overflow.  Fixes #552464.



Modified:
   trunk/ChangeLog
   trunk/NEWS
   trunk/src/parse-util.c
   trunk/src/parse-util.h
   trunk/src/value.c
   trunk/src/xml-sax-write.c

Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS	(original)
+++ trunk/NEWS	Sat Dec 13 18:03:07 2008
@@ -52,6 +52,7 @@
 	* Plug leaks in ssindex, ssgrep, and ssconvert.
 	* Fix export of Gnumeric-specific patterns to xls.  [#564078]
 	* Improve guess of csv parsing parameters.  [#498912]
+	* Fix problem with saving huge values.  [#552464]
 
 --------------------------------------------------------------------------
 Gnumeric 1.9.3

Modified: trunk/src/parse-util.c
==============================================================================
--- trunk/src/parse-util.c	(original)
+++ trunk/src/parse-util.c	Sat Dec 13 18:03:07 2008
@@ -1360,6 +1360,7 @@
 	convs->input.name		= std_name_parser;
 	convs->input.func		= std_func_map;
 
+	convs->output.decimal_digits	= GNM_DIG;
 	convs->output.translated	= TRUE;
 	convs->output.string		= std_output_string;
 	convs->output.name		= std_expr_name_handler;

Modified: trunk/src/parse-util.h
==============================================================================
--- trunk/src/parse-util.h	(original)
+++ trunk/src/parse-util.h	Sat Dec 13 18:03:07 2008
@@ -158,6 +158,8 @@
 
 /* Export specific functions ----------------------------------- */
 	struct {
+		int decimal_digits;
+
 		gboolean translated;
 
 		void (*string)	  (GnmConventionsOut *out,

Modified: trunk/src/value.c
==============================================================================
--- trunk/src/value.c	(original)
+++ trunk/src/value.c	Sat Dec 13 18:03:07 2008
@@ -875,7 +875,8 @@
 		return;
 
 	case VALUE_FLOAT:
-		g_string_append_printf (target, "%.*" GNM_FORMAT_g, GNM_DIG,
+		g_string_append_printf (target, "%.*" GNM_FORMAT_g,
+					conv->output.decimal_digits,
 					v->v_float.val);
 		return;
 

Modified: trunk/src/xml-sax-write.c
==============================================================================
--- trunk/src/xml-sax-write.c	(original)
+++ trunk/src/xml-sax-write.c	Sat Dec 13 18:03:07 2008
@@ -1234,6 +1234,7 @@
 gnm_xml_io_conventions (void)
 {
 	GnmConventions *res = gnm_conventions_new ();
+	gnm_float l10;
 
 	res->decimal_sep_dot	= TRUE;
 	res->input.range_ref	= rangeref_parse;
@@ -1244,6 +1245,10 @@
 	res->array_row_sep	= ';';
 	res->output.translated	= FALSE;
 
+	l10 = gnm_log10 (FLT_RADIX);
+	res->output.decimal_digits = (int)gnm_ceil (GNM_MANT_DIG * l10) +
+		(l10 == (int)l10 ? 0 : 1);
+
 	return res;
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]