display can be wrong : 11/16811/3
Antoine ELIAS [Tue, 7 Jul 2015 11:59:32 +0000 (13:59 +0200)]
16278*12286
 ans  =

    1.1000D+08

Change-Id: I26e547124b7607be11275d389ce215dd0829a0d3

scilab/modules/ast/src/cpp/types/tostring_common.cpp
scilab/modules/core/tests/unit_tests/format.dia.ref
scilab/modules/core/tests/unit_tests/format.tst

index 6118d02..d1eb619 100644 (file)
@@ -279,14 +279,27 @@ void addDoubleValue(std::wostringstream * _postr, double _dblVal, DoubleFormat *
 
         if (_pDF->bPrintPoint)
         {
-            os_swprintf(pwstFormat, 32, L"%ls%%#.0f%%0%d.0fD%%+.02d", pwstSign, _pDF->iPrec);
+            os_swprintf(pwstFormat, 32, L"%ls%%#d.%%0%ddD%%+.02d", pwstSign, _pDF->iPrec);
         }
         else
         {
-            os_swprintf(pwstFormat, 32, L"%ls%%.0f%%0%d.0fD%%+.02d", pwstSign, _pDF->iPrec);
+            os_swprintf(pwstFormat, 32, L"%ls%%d%%0%ddD%%+.02d", pwstSign, _pDF->iPrec);
         }
 
-        os_swprintf(pwstOutput, 32, pwstFormat, dblEnt, dblDec, (int)dblTemp);
+        if ((int)std::round(dblDec) != (int)dblDec)
+        {
+            double d1 = (int)std::round(dblDec);
+            d1 = fmod(d1, pow(10., _pDF->iPrec));
+            if (d1 < dblDec)
+            {
+                //inc integer part
+                ++dblEnt;
+            }
+
+            dblDec = d1;
+        }
+
+        os_swprintf(pwstOutput, 32, pwstFormat, (int)dblEnt, (int)dblDec, (int)dblTemp);
     }
     else if ((_pDF->bPrintOne == true) || (isEqual(fabs(_dblVal), 1)) == false)
     {
index 3a69a19..a7c8b66 100644 (file)
 //
 // format unitary tests
 fmt = format();
-format('v')
+format("v")
 sqrt(3)
  ans  =
-    1.7320508  
+    1.7320508
 format(10)
 sqrt(3)
  ans  =
-    1.7320508  
-format(12,'v')
+    1.7320508
+format(12,"v")
 sqrt(3)
  ans  =
-    1.732050808  
-format('v',15)
+    1.732050808
+format("v",15)
 sqrt(3)
  ans  =
-    1.732050807569  
-format('e')
+    1.732050807569
+format("e")
 sqrt(3)
  ans  =
-    1.73205081D+00  
+    1.73205081D+00
 format(10)
 sqrt(3)
  ans  =
-    1.732D+00  
+    1.732D+00
 f = format();
 assert_checkequal(f, [0 10]);
-format(10,'v');
+format(10,"v");
 v = format();
 m = [v(2) v(1)];
 format(m);
 f = format();
 assert_checkequal(f, v);
-format('v', 10);
+format("v", 10);
 f = format();
 assert_checkequal(f, [1 10]);
 format(20);
 f = format();
 assert_checkequal(f, [1 20]);
-format('e', 10);
+format("e", 10);
 f = format();
 assert_checkequal(f, [0 10]);
 format(20);
 f = format();
 assert_checkequal(f, [0 20]);
-format('e', 10);
+format("e", 10);
 f = format();
 assert_checkequal(f, [0 10]);
-format('v', 10);
+format("v", 10);
 f = format();
 assert_checkequal(f, [1 10]);
 format("v");
@@ -72,3 +66,12 @@ assert_checkequal(f, [1 10]);
 format("e");
 f = format();
 assert_checkequal(f, [0 10]);
+// Test which failed before: https://codereview.scilab.org/#/c/16811/
+format("v", 10);
+16278*12286
+ ans  =
+    2.000D+08
+format(11);
+16278*12286
+ ans  =
+    199991508.
index 321f484..3b19218 100644 (file)
 // format unitary tests
 
 fmt = format();
-format('v')
+format("v")
 sqrt(3)
 format(10)
 sqrt(3)
-format(12,'v')
+format(12,"v")
 sqrt(3)
-format('v',15)
+format("v",15)
 sqrt(3)
-format('e')
+format("e")
 sqrt(3)
 format(10)
 sqrt(3)
 f = format();
 assert_checkequal(f, [0 10]);
-format(10,'v');
+format(10,"v");
 v = format();
 m = [v(2) v(1)];
 format(m);
 f = format();
 assert_checkequal(f, v);
 
-format('v', 10);
+format("v", 10);
 f = format();
 assert_checkequal(f, [1 10]);
 
@@ -40,7 +40,7 @@ format(20);
 f = format();
 assert_checkequal(f, [1 20]);
 
-format('e', 10);
+format("e", 10);
 f = format();
 assert_checkequal(f, [0 10]);
 
@@ -48,11 +48,11 @@ format(20);
 f = format();
 assert_checkequal(f, [0 20]);
 
-format('e', 10);
+format("e", 10);
 f = format();
 assert_checkequal(f, [0 10]);
 
-format('v', 10);
+format("v", 10);
 f = format();
 assert_checkequal(f, [1 10]);
 
@@ -62,4 +62,10 @@ assert_checkequal(f, [1 10]);
 
 format("e");
 f = format();
-assert_checkequal(f, [0 10]);
\ No newline at end of file
+assert_checkequal(f, [0 10]);
+
+// Test which failed before: https://codereview.scilab.org/#/c/16811/
+format("v", 10);
+16278*12286
+format(11);
+16278*12286