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/06 22:08:41 UTC
svn commit: r1369965 -
/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/atomic/XSDecimalPointable.java
Author: prestonc
Date: Mon Aug 6 20:08:41 2012
New Revision: 1369965
URL: http://svn.apache.org/viewvc?rev=1369965&view=rev
Log:
Update the method to find number of digits with a more reliable method. (Increased precision back to 18)
Modified:
incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/atomic/XSDecimalPointable.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=1369965&r1=1369964&r2=1369965&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 Mon Aug 6 20:08:41 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 = 15;
+ public final static int PRECISION = 18;
public static final ITypeTraits TYPE_TRAITS = new ITypeTraits() {
private static final long serialVersionUID = 1L;
@@ -163,7 +163,17 @@ public class XSDecimalPointable extends
}
public static byte getDigitCount(byte[] bytes, int start) {
- return (byte) (Math.log10((double) getDecimalValue(bytes, start)) + 1);
+ long value = getDecimalValue(bytes, start);
+ if (value < 0) {
+ value *= -1;
+ }
+ long check = 10;
+ for (byte i = 1; i < PRECISION; i++) {
+ if (value < check)
+ return i;
+ check *= 10;
+ }
+ return PRECISION;
}
@Override