Revision: 4333
          http://vexi.svn.sourceforge.net/vexi/?rev=4333&view=rev
Author:   mkpg2
Date:     2012-01-19 00:56:16 +0000 (Thu, 19 Jan 2012)
Log Message:
-----------
Fix. Do not convert to double (and lose precision) when parsing string to 
rational.

Modified Paths:
--------------
    trunk/org.vexi-library.js/src/main/java/org/ibex/js/JSNumber.java
    trunk/org.vexi-library.js/src/poke/java/org/ibex/js/RunJS.java
    trunk/org.vexi-library.js/src/test/java/test/js/exec/number/rationalMaths.js

Modified: trunk/org.vexi-library.js/src/main/java/org/ibex/js/JSNumber.java
===================================================================
--- trunk/org.vexi-library.js/src/main/java/org/ibex/js/JSNumber.java   
2012-01-19 00:39:15 UTC (rev 4332)
+++ trunk/org.vexi-library.js/src/main/java/org/ibex/js/JSNumber.java   
2012-01-19 00:56:16 UTC (rev 4333)
@@ -43,9 +43,14 @@
         throw new JSExn("Not a valid number format: "+JSU.toString(format));
     }
     
-    static private JSNumber tryParseString(String s){
+    static private JSNumber tryParseString(String s, int formatConst){
         try{
-            Number n = Lexer.parseNumber(s, true);
+            Number n = null;
+            if(formatConst==N_RATIONAL){
+                n = Rational.tryParse(s);
+            }else{
+                n = Lexer.parseNumber(s, true);
+            }
             return JSU.N(n);
         }catch(IOException e){
             return null;
@@ -58,7 +63,7 @@
         JSNumber n;
         if(!(o instanceof JSNumber)){
             String s = JSU.toString(o);
-            n = tryParseString(s);
+            n = tryParseString(s, formatConst);
             if(n==null) throw new JSExn("Cannot cast to string: "+s);
         }else{
             n = (JSNumber)o;
@@ -86,7 +91,7 @@
                 JS arg = args[0];
                 if("tryParseString".equals(methodStr)) {
                     String s = JSU.toString(arg);
-                    return tryParseString(s);
+                    return tryParseString(s, -1);
                 }else if("cast".equals(methodStr)) {
                     JS format = null;
                     if(args.length>=2) format = args[1];

Modified: trunk/org.vexi-library.js/src/poke/java/org/ibex/js/RunJS.java
===================================================================
--- trunk/org.vexi-library.js/src/poke/java/org/ibex/js/RunJS.java      
2012-01-19 00:39:15 UTC (rev 4332)
+++ trunk/org.vexi-library.js/src/poke/java/org/ibex/js/RunJS.java      
2012-01-19 00:56:16 UTC (rev 4333)
@@ -214,6 +214,8 @@
                                return METHOD;
                        if("sys".equals(key))
                                return sys;
+                if("trace".equals(key))
+                   return sys.get(arg);
                        if("export".equals(key))
                                return export;
                        if(imports.containsKey(arg))

Modified: 
trunk/org.vexi-library.js/src/test/java/test/js/exec/number/rationalMaths.js
===================================================================
--- 
trunk/org.vexi-library.js/src/test/java/test/js/exec/number/rationalMaths.js    
    2012-01-19 00:39:15 UTC (rev 4332)
+++ 
trunk/org.vexi-library.js/src/test/java/test/js/exec/number/rationalMaths.js    
    2012-01-19 00:56:16 UTC (rev 4333)
@@ -1,8 +1,12 @@
 sys.import("lib");
 sys.import("shared");
 
-assertEquals(300, sys.js.Number.tryParseString("300r"));
-assertEquals(-123.123r, sys.js.Number.tryParseString("-123.123r"));
+const Number = sys.js.Number;
+
+assertEquals("0.02",""+Number.cast("0.02","rational"));
+
+assertEquals(300, Number.tryParseString("300r"));
+assertEquals(-123.123r, Number.tryParseString("-123.123r"));
 assertEquals(300r.toDecimalString(3), "300.000");
 //assertEquals(0, 10.0%0.001);
 //assertEquals(0.05, 1.3%0.25);
\ No newline at end of file

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Keep Your Developer Skills Current with LearnDevNow!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-d2d
_______________________________________________
Vexi-svn mailing list
Vexi-svn@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/vexi-svn

Reply via email to