[ast] display trailling zeros when significant digit is hidden 92/21092/4
St├ęphane MOTTELET [Wed, 18 Sep 2019 14:41:44 +0000 (16:41 +0200)]
This patch activates the display of trailing zeros only when
displaying a scalar, matrix display is unchanged:

--> x=1:0.1:2
 x  =

   1.   1.1   1.2   1.3   1.4   1.5   1.6   1.7   1.8   1.9   2.

--> x(8)
 ans  =

   1.7000000

--> x(8)-1.7
 ans  =

   2.220D-16

Change-Id: I176ac635ddd7b10f9f9e4f57291b594e666bf59e

scilab/CHANGES.md
scilab/modules/ast/includes/types/tostring_common.hxx
scilab/modules/ast/src/cpp/types/tostring_common.cpp

index bee5907..44c44b0 100644 (file)
@@ -27,6 +27,10 @@ For a high-level description of the main new features of this release, please co
 In summary, the main new features are:
 * Webtools utilities added for HTTP protocol, JSON data usage
 * Profiled values are available as Scilab values 
+* Values have a cleaner display:
+   - strings are quoted
+   - complex numbers are aligned for matrices
+   - numbers (IEEE 754 double) are not rounded
 
 Installation
 ------------
index 92cc312..d6edf79 100644 (file)
@@ -43,7 +43,9 @@
 
 typedef struct __DOUBLE_FORMAT__
 {
-    __DOUBLE_FORMAT__() : iWidth(0), iPrec(0), bExp(false), bPrintPoint(true), bPrintPlusSign(false), bPrintOne(true), bPaddSign(true), iSignLen(SIGN_LENGTH), bPrintBlank(true), bPrintComplexPlusSpace(false) {}
+    __DOUBLE_FORMAT__() : iWidth(0), iPrec(0), bExp(false), bPrintPoint(true),
+                    bPrintPlusSign(false), bPrintOne(true), bPaddSign(true), iSignLen(SIGN_LENGTH),
+                    bPrintBlank(true), bPrintComplexPlusSpace(false), bPrintTrailingZeros(false) {}
     int iWidth;
     int iPrec;
     bool bExp;
@@ -54,7 +56,8 @@ typedef struct __DOUBLE_FORMAT__
     int iSignLen;
     bool bPrintBlank;
     bool bPrintComplexPlusSpace;
-} DoubleFormat;
+    bool bPrintTrailingZeros;
+    } DoubleFormat;
 
 /*double*/
 //void getDoubleFormat(double _dblVal, int *_piWidth, int *_piPrec, bool* _pExp);
index cf45135..e8bbc6c 100644 (file)
@@ -295,15 +295,15 @@ void addDoubleValue(std::wostringstream * _postr, double _dblVal, DoubleFormat *
         }
 
         // append trailing zeros, if applicable
-        if (std::atof(str.data()) != fabs(_dblVal))
+        if (std::atof(str.data()) != fabs(_dblVal) && _pDF->bPrintTrailingZeros == true)
         {
             if (_pDF->bPrintPoint)
             {
-                /*str.append(std::max(0, (ConfigVariable::getFormatSize() - (int)str.length()))-1, '0');*/
+                str.append(std::max(0, (ConfigVariable::getFormatSize() - (int)str.length()))-1, '0');
             }
             else
             {
-                iWidth = 1 + str.length();
+                iWidth = 1+str.length();
             }
         }
 
@@ -423,6 +423,7 @@ void printEmptyString(std::wostringstream& ostr)
 void printDoubleValue(std::wostringstream& ostr, double val)
 {
     DoubleFormat df;
+    df.bPrintTrailingZeros = true;
     getDoubleFormat(val, &df);
     ostr << SPACE_BETWEEN_TWO_VALUES;
     addDoubleValue(&ostr, val, &df);
@@ -431,6 +432,9 @@ void printDoubleValue(std::wostringstream& ostr, double val)
 void printComplexValue(std::wostringstream& ostr, double val_r, double val_i)
 {
     DoubleFormat dfR, dfI;
+    dfR.bPrintTrailingZeros = true;
+    dfI.bPrintTrailingZeros = true;
+
     int iTotalWidth;
     getComplexFormat(ZeroIsZero(val_r), ZeroIsZero(val_i), &iTotalWidth, &dfR, &dfI);
     ostr << SPACE_BETWEEN_TWO_VALUES;