You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xmlbeans.apache.org by ra...@apache.org on 2008/03/29 00:35:39 UTC
svn commit: r642433 -
/xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/util/XsTypeConverter.java
Author: radup
Date: Fri Mar 28 16:35:38 2008
New Revision: 642433
URL: http://svn.apache.org/viewvc?rev=642433&view=rev
Log:
Changed fix for XMLBEANS-175.
Modified:
xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/util/XsTypeConverter.java
Modified: xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/util/XsTypeConverter.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/util/XsTypeConverter.java?rev=642433&r1=642432&r2=642433&view=diff
==============================================================================
--- xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/util/XsTypeConverter.java (original)
+++ xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/util/XsTypeConverter.java Fri Mar 28 16:35:38 2008
@@ -173,54 +173,58 @@
}
}
+ private static final char[] CH_ZEROS = new char[] {'0', '0', '0', '0', '0', '0', '0', '0',
+ '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'};
+
public static String printDecimal(BigDecimal value)
{
// We can't simply use value.toString() here, because in JDK1.5 that returns an
// exponent String and exponents are not allowed in XMLSchema decimal values
- BigDecimal bd = value;
- int scale = bd.scale();
- if (scale < 0)
+ // The following code comes from Apache Harmony
+ String intStr = value.unscaledValue().toString();
+ int scale = value.scale();
+ if ((scale == 0) || ((value.longValue() == 0) && (scale < 0)))
+ return intStr;
+
+ int begin = (value.signum() < 0) ? 1 : 0;
+ int delta = scale;
+ // We take space for all digits, plus a possible decimal point, plus 'scale'
+ StringBuffer result = new StringBuffer(intStr.length() + 1 + Math.abs(scale));
+
+ if (begin == 1)
{
- bd.setScale(0);
- return printInteger(bd.unscaledValue());
+ // If the number is negative, we insert a '-' character at front
+ result.append('-');
}
- else if (scale == 0)
- return printInteger(bd.unscaledValue());
- else
+ if (scale > 0)
{
- String intString = bd.unscaledValue().abs().toString();
- int signum = bd.signum();
- StringBuffer buf;
- int insertionPoint = intString.length() - scale;
- if (insertionPoint == 0)
- { /* Point goes right before intVal */
- buf = new StringBuffer(3 + intString.length());
- buf.append(signum < 0 ? "-0." : "0.").append(intString);
- }
- else if (insertionPoint > 0)
- { /* Point goes inside intVal */
- buf = new StringBuffer(intString.length() + 2);
- if (signum < 0)
- {
- buf.append('-').append(intString);
- buf.insert(insertionPoint + 1, '.');
- }
- else
- {
- buf.append(intString);
- buf.insert(insertionPoint, '.');
- }
+ delta -= (intStr.length() - begin);
+ if (delta >= 0)
+ {
+ result.append("0."); //$NON-NLS-1$
+ // To append zeros after the decimal point
+ for (; delta > CH_ZEROS.length; delta -= CH_ZEROS.length)
+ result.append(CH_ZEROS);
+ result.append(CH_ZEROS, 0, delta);
+ result.append(intStr.substring(begin));
}
else
- { /* We must insert zeros between point and intVal */
- buf = new StringBuffer(3 - insertionPoint + intString.length());
- buf.append(signum < 0 ? "-0." : "0.");
- for (int i = 0; i < -insertionPoint; i++)
- buf.append('0');
- buf.append(intString);
+ {
+ delta = begin - delta;
+ result.append(intStr.substring(begin, delta));
+ result.append('.');
+ result.append(intStr.substring(delta));
}
- return buf.toString();
}
+ else
+ {// (scale <= 0)
+ result.append(intStr.substring(begin));
+ // To append trailing zeros
+ for (; delta < -CH_ZEROS.length; delta += CH_ZEROS.length)
+ result.append(CH_ZEROS);
+ result.append(CH_ZEROS, 0, -delta);
+ }
+ return result.toString();
}
// ======================== integer ========================
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xmlbeans.apache.org
For additional commands, e-mail: commits-help@xmlbeans.apache.org