Browse Source

pastojs: nicer float 1E-12

git-svn-id: trunk@38112 -
Mattias Gaertner 7 years ago
parent
commit
1ddbaa946c
2 changed files with 23 additions and 3 deletions
  1. 15 3
      packages/fcl-js/src/jswriter.pp
  2. 8 0
      packages/pastojs/tests/tcmodules.pas

+ 15 - 3
packages/fcl-js/src/jswriter.pp

@@ -610,8 +610,7 @@ begin
             if S[j]='.' then
               Insert('0',S2,j+1);
             // increment, e.g. 1.2999 -> 1.3
-            while (j>0) do
-              begin
+            repeat
               case S2[j] of
               '0'..'8':
                 begin
@@ -620,9 +619,22 @@ begin
                 end;
               '9':
                 S2[j]:='0';
+              '.': ;
               end;
               dec(j);
-              end;
+              if (j=0) or not (S2[j] in ['0'..'9','.']) then
+                begin
+                // e.g. -9.999 became 0.0
+                val(copy(S,i+1,length(S)),Exp,Code);
+                if Code=0 then
+                  begin
+                  S2:='1E'+IntToStr(Exp+1);
+                  if S[1]='-' then
+                    S2:='-'+S2;
+                  end;
+                break;
+                end;
+            until false;
             val(S2,D,Code);
             if (Code=0) and (D=V.AsNumber) then
               S:=S2;

+ 8 - 0
packages/pastojs/tests/tcmodules.pas

@@ -4404,6 +4404,8 @@ begin
   '  fn123456_0 = -123456.0;',
   '  fn1234567_8 = -1234567.8;',
   '  fn12345678_9 = -12345678.9;',
+  '  f1_0En12 = 1E-12;',
+  '  fn1_0En12 = -1E-12;',
   'var',
   '  d: double = b;',
   'begin',
@@ -4426,6 +4428,8 @@ begin
   '  d:=fn123456_0;',
   '  d:=fn1234567_8;',
   '  d:=fn12345678_9;',
+  '  d:=f1_0En12;',
+  '  d:=fn1_0En12;',
   '']);
   ConvertProgram;
   CheckSource('TestDouble',
@@ -4443,6 +4447,8 @@ begin
     'this.fn123456_0 = -123456.0;',
     'this.fn1234567_8 = -1234567.8;',
     'this.fn12345678_9 = -12345678.9;',
+    'this.f1_0En12 = 1E-12;',
+    'this.fn1_0En12 = -1E-12;',
     'this.d = 4.4;'
     ]),
     LinesToStr([
@@ -4465,6 +4471,8 @@ begin
     '$mod.d = -123456;',
     '$mod.d = -1234567.8;',
     '$mod.d = -1.23456789E7;',
+    '$mod.d = 1E-12;',
+    '$mod.d = -1E-12;',
     '']));
 end;