Request for approval: fix 4428022, System.out.println(0.001) outputs 0.0010

Andrew Haley aph at redhat.com
Fri May 22 17:21:52 UTC 2009


Alan Bateman wrote:
> Andrew Haley wrote:
>> This bug has been in Java for a long time, and the fix has been in
>> IcedTea
>> for a year and a half.
>>
>> The bug is a trivial off-by-one error.
>>
>> OK for OpenJDK7 and OpenJDK6?
>>
>> Andrew.
>>   
> It looks reasonable to me although Joe would be the best person to
> review this. It would be good to create a regression test to include
> with the change-set.

OK, here it is.  I put the test in java/lang/Double/ToString.java
rather than sun/misc/FloatingDecimal because the bug manifested
itself in Double.toString although the fix was in
FloatingDecimal.dtoa.

Andrew.



diff -r 9b0f73e7a137 src/share/classes/sun/misc/FloatingDecimal.java
--- a/src/share/classes/sun/misc/FloatingDecimal.java	Thu May 21 14:48:03 2009 +0100
+++ b/src/share/classes/sun/misc/FloatingDecimal.java	Fri May 22 18:17:52 2009 +0100
@@ -730,7 +730,7 @@
                  * Thus we will need more than one digit if we're using
                  * E-form
                  */
-                if ( decExp <= -3 || decExp >= 8 ){
+                if ( decExp < -3 || decExp >= 8 ){
                     high = low = false;
                 }
                 while( ! low && ! high ){
@@ -783,7 +783,7 @@
                  * Thus we will need more than one digit if we're using
                  * E-form
                  */
-                if ( decExp <= -3 || decExp >= 8 ){
+                if ( decExp < -3 || decExp >= 8 ){
                     high = low = false;
                 }
                 while( ! low && ! high ){
@@ -847,7 +847,7 @@
              * Thus we will need more than one digit if we're using
              * E-form
              */
-            if ( decExp <= -3 || decExp >= 8 ){
+            if ( decExp < -3 || decExp >= 8 ){
                 high = low = false;
             }
             while( ! low && ! high ){
diff -r 9b0f73e7a137 test/java/lang/Double/ToString.java
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/lang/Double/ToString.java	Fri May 22 18:17:52 2009 +0100
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 4428022
+ * @summary Tests for Double.toString
+ * @author Andrew Haley <aph at redhat.com>
+ */
+
+public class ToString {
+
+    public static void main(String argv[]) {
+      if (!Double.toString(0.001).equals("0.001"))
+	  throw new RuntimeException("Double.toString(0.001) is not \"0.001\"");
+      if (!Double.toString(0.002).equals("0.002"))
+	  throw new RuntimeException("Double.toString(0.001) is not \"0.002\"");
+    }
+}



More information about the core-libs-dev mailing list