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> 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 * java/beans/PropertyDescriptor.java
(PropertyDescriptor(String, Class)): Sanity check getter and setter (PropertyDescriptor(String, Class)): Sanity check getter and setter
methods. methods.
......
...@@ -178,7 +178,16 @@ public class BigDecimal extends Number implements Comparable ...@@ -178,7 +178,16 @@ public class BigDecimal extends Number implements Comparable
// Now parse exponent. // Now parse exponent.
if (point < len) 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; exp -= scale;
if (exp > 0) if (exp > 0)
{ {
...@@ -188,6 +197,11 @@ public class BigDecimal extends Number implements Comparable ...@@ -188,6 +197,11 @@ public class BigDecimal extends Number implements Comparable
else else
scale = - exp; scale = - exp;
} }
catch (NumberFormatException ex)
{
throw new NumberFormatException ("malformed exponent");
}
}
} }
public static BigDecimal valueOf (long val) public static BigDecimal valueOf (long val)
...@@ -198,7 +212,7 @@ public class BigDecimal extends Number implements Comparable ...@@ -198,7 +212,7 @@ public class BigDecimal extends Number implements Comparable
public static BigDecimal valueOf (long val, int scale) public static BigDecimal valueOf (long val, int scale)
throws NumberFormatException throws NumberFormatException
{ {
if (scale == 0) if ((scale == 0) && ((int)val == val))
switch ((int) val) switch ((int) val)
{ {
case 0: case 0:
...@@ -431,19 +445,29 @@ public class BigDecimal extends Number implements Comparable ...@@ -431,19 +445,29 @@ public class BigDecimal extends Number implements Comparable
if (scale == 0) if (scale == 0)
return bigStr; return bigStr;
int point = bigStr.length() - scale;
boolean negative = (bigStr.charAt(0) == '-'); 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) if (negative)
sb.append('-'); sb.append('-');
while (point <= 0) sb.append('0').append('.');
while (point < 0)
{ {
sb.append('0'); sb.append('0');
point++; point++;
} }
sb.append(bigStr.substring(negative ? 1 : 0)); sb.append(bigStr.substring(negative ? 1 : 0));
sb.insert(point, '.'); }
else
{
sb.append(bigStr);
sb.insert(point + (negative ? 1 : 0), '.');
}
return sb.toString(); 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