PatchSet 4255 
Date: 2003/12/31 16:54:58
Author: guilhem
Branch: HEAD
Tag: (none) 
Log:
Fixed rounding operations in divide().

Members: 
        ChangeLog:1.1842->1.1843 
        libraries/javalib/java/math/BigDecimal.java:1.7->1.8 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.1842 kaffe/ChangeLog:1.1843
--- kaffe/ChangeLog:1.1842      Wed Dec 31 16:53:50 2003
+++ kaffe/ChangeLog     Wed Dec 31 16:54:58 2003
@@ -1,5 +1,10 @@
 2003-12-31  Guilhem Lavaux <[EMAIL PROTECTED]>
 
+       * libraries/javalib/java/math/BigDecimal.java
+       (divide): Fixed rounding operations.
+
+2003-12-31  Guilhem Lavaux <[EMAIL PROTECTED]>
+
        * libraries/javalib/java/net/URL.java,
        libraries/javalib/java/net/URLStreamHandler.java:
        Implemented authority string generation and fixed toExternalForm()
Index: kaffe/libraries/javalib/java/math/BigDecimal.java
diff -u kaffe/libraries/javalib/java/math/BigDecimal.java:1.7 
kaffe/libraries/javalib/java/math/BigDecimal.java:1.8
--- kaffe/libraries/javalib/java/math/BigDecimal.java:1.7       Thu Nov 22 06:21:13 
2001
+++ kaffe/libraries/javalib/java/math/BigDecimal.java   Wed Dec 31 16:55:04 2003
@@ -195,7 +195,7 @@
        }
 
        int sign = a.signum() * b.signum();
-       // half rounding study (r / b) <=> .5 aka r * .5 <=> b
+       // half rounding study (r / b) <=> .5 aka r * 2 <=> b
        int half = r.abs().multiply(BigInteger.valueOf(2)).compareTo(b.abs());
        switch (roundingMode) {
        case ROUND_CEILING:
@@ -222,9 +222,15 @@
            throw new ArithmeticException("Rounding necessary");
        }
 
-       return new BigDecimal((roundingMode == ROUND_UP)
-                             ? q.add(BigInteger.ONE) : q,
-                             newScale);
+       if (roundingMode == ROUND_UP)
+         q = q.abs().add(BigInteger.ONE);
+       else
+         q = q.abs();
+    
+       if (sign > 0)
+         return new BigDecimal(q, newScale);
+       else
+         return new BigDecimal(q.negate(), newScale);
     }
 
     public BigDecimal divide(BigDecimal val, int roundingMode) {

_______________________________________________
kaffe mailing list
[EMAIL PROTECTED]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to