Commit 364df9fc by Stephen Crawley Committed by Mark Wielaard

BigDecimal (valueOf): fix DiagBigDecimal val008, val013 tests; see patch #1016 on Savannah.

2003-02-07  Stephen Crawley  <crawley@dstc.edu.au>

       * java/math/BigDecimal(valueOf): fix DiagBigDecimal val008, val013
       tests; see patch #1016 on Savannah.

2003-02-07  Stephen Crawley  <crawley@dstc.edu.au>

       * java/math/BigDecimal.java (BigDecimal): enhance parsing of exponents
       (toString): do not return Strings starting with . and - erroneously.
       Improves Mauve results to 12 of 600 instead of 16 of 338 on
       DiagBigDecimal.

From-SVN: r62540
parent b20fcd47
2003-02-07 Stephen Crawley <crawley@dstc.edu.au>
* java/math/BigDecimal(valueOf): fix DiagBigDecimal val008, val013
tests; see patch #1016 on Savannah.
2003-02-07 Stephen Crawley <crawley@dstc.edu.au>
* java/math/BigDecimal.java (BigDecimal): enhance parsing of exponents
(toString): do not return Strings starting with . and - erroneously.
Improves Mauve results to 12 of 600 instead of 16 of 338 on
DiagBigDecimal.
2003-02-07 Stephen Crawley <crawley@dstc.edu.au>
* java/beans/PropertyDescriptor.java
(PropertyDescriptor(String, Class)): Sanity check getter and setter
methods.
......
......@@ -178,7 +178,16 @@ public class BigDecimal extends Number implements Comparable
// Now parse exponent.
if (point < len)
{
int exp = Integer.parseInt (num.substring (point + 1));
point++;
if (num.charAt(point) == '+')
point++;
if (point >= len )
throw new NumberFormatException ("no exponent following e or E");
try
{
int exp = Integer.parseInt (num.substring (point));
exp -= scale;
if (exp > 0)
{
......@@ -188,6 +197,11 @@ public class BigDecimal extends Number implements Comparable
else
scale = - exp;
}
catch (NumberFormatException ex)
{
throw new NumberFormatException ("malformed exponent");
}
}
}
public static BigDecimal valueOf (long val)
......@@ -198,7 +212,7 @@ public class BigDecimal extends Number implements Comparable
public static BigDecimal valueOf (long val, int scale)
throws NumberFormatException
{
if (scale == 0)
if ((scale == 0) && ((int)val == val))
switch ((int) val)
{
case 0:
......@@ -431,19 +445,29 @@ public class BigDecimal extends Number implements Comparable
if (scale == 0)
return bigStr;
int point = bigStr.length() - scale;
boolean negative = (bigStr.charAt(0) == '-');
StringBuffer sb = new StringBuffer(bigStr.length() + 1 +
(point <= 0 ? -point+1 : 0));
int point = bigStr.length() - scale - (negative ? 1 : 0);
StringBuffer sb = new StringBuffer(bigStr.length() + 2 +
(point <= 0 ? (-point + 1) : 0));
if (point <= 0)
{
if (negative)
sb.append('-');
while (point <= 0)
sb.append('0').append('.');
while (point < 0)
{
sb.append('0');
point++;
}
sb.append(bigStr.substring(negative ? 1 : 0));
sb.insert(point, '.');
}
else
{
sb.append(bigStr);
sb.insert(point + (negative ? 1 : 0), '.');
}
return sb.toString();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment