You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vxquery.apache.org by pr...@apache.org on 2012/08/03 04:09:55 UTC

svn commit: r1368766 - in /incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery: datamodel/accessors/atomic/XSDecimalPointable.java runtime/functions/cast/CastToIntegerOperation.java

Author: prestonc
Date: Fri Aug  3 02:09:55 2012
New Revision: 1368766

URL: http://svn.apache.org/viewvc?rev=1368766&view=rev
Log:
Fixed an issue with rounding when getting the number before the decimal.

Modified:
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/atomic/XSDecimalPointable.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToIntegerOperation.java

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/atomic/XSDecimalPointable.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/atomic/XSDecimalPointable.java?rev=1368766&r1=1368765&r2=1368766&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/atomic/XSDecimalPointable.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/atomic/XSDecimalPointable.java Fri Aug  3 02:09:55 2012
@@ -13,7 +13,7 @@ import edu.uci.ics.hyracks.data.std.prim
 public class XSDecimalPointable extends AbstractPointable implements IHashable, IComparable, INumeric {
     private final static int DECIMAL_PLACE_OFFSET = 0;
     private final static int VALUE_OFFSET = 1;
-    public final static int PRECISION = 18;
+    public final static int PRECISION = 15;
 
     public static final ITypeTraits TYPE_TRAITS = new ITypeTraits() {
         private static final long serialVersionUID = 1L;
@@ -142,12 +142,20 @@ public class XSDecimalPointable extends 
         return (int) (v ^ (v >>> 32));
     }
 
+    public long getBeforeDecimalPlaceRounded() {
+        return getBeforeDecimalPlaceRounded(bytes, start);
+    }
+
+    public static long getBeforeDecimalPlaceRounded(byte[] bytes, int start) {
+        return Math.round(getDecimalValue(bytes, start) / Math.pow(10, getDecimalPlace(bytes, start)));
+    }
+
     public long getBeforeDecimalPlace() {
         return getBeforeDecimalPlace(bytes, start);
     }
 
     public static long getBeforeDecimalPlace(byte[] bytes, int start) {
-        return Math.round(getDecimalValue(bytes, start) / Math.pow(10, getDecimalPlace(bytes, start)));
+        return (long) (getDecimalValue(bytes, start) / Math.pow(10, getDecimalPlace(bytes, start)));
     }
 
     public byte getDigitCount() {
@@ -175,7 +183,7 @@ public class XSDecimalPointable extends 
 
     @Override
     public long longValue() {
-        return getBeforeDecimalPlace();
+        return getBeforeDecimalPlaceRounded();
     }
 
     @Override

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToIntegerOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToIntegerOperation.java?rev=1368766&r1=1368765&r2=1368766&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToIntegerOperation.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToIntegerOperation.java Fri Aug  3 02:09:55 2012
@@ -27,7 +27,7 @@ public class CastToIntegerOperation exte
     @Override
     public void convertDecimal(XSDecimalPointable decp, DataOutput dOut) throws SystemException, IOException {
         dOut.write(ValueTag.XS_INTEGER_TAG);
-        dOut.writeLong(decp.longValue());
+        dOut.writeLong(decp.getBeforeDecimalPlace());
     }
 
     @Override
@@ -81,7 +81,6 @@ public class CastToIntegerOperation exte
         if (negative) {
             value *= -1;
         }
-        System.err.println("   int value = " + value);
 
         dOut.write(ValueTag.XS_INTEGER_TAG);
         dOut.writeLong(value);