Подтвердить что ты не робот

Java7 Double.toString() возвращает 0.005/java6 - 0.0050

Я обновляюсь от JDK6 до JDK7. Следующий код демонстрирует незначительное изменение в Double.toString()

public class StringDemo
{

    public static void main(String[] args)
    {
        System.out.println(Double.toString(.0005));
        System.out.println(Double.toString(.005)); //different string
        System.out.println(Double.toString(.05));
        System.out.println(Double.toString(.5));
    }
}

JRE6

5.0E-4
0.0050
0.05
0.5

JRE7

Я ищу любую документацию, связанную с вышеуказанным изменением. Страница совместимости не распространяется на нее.

5.0E-4
0.005   //changed.
0.05
0.5

Выход был сохранен во многих файлах справки и сравнивается с помощью сравнения строк - мне нужно исправить сравнение, но любопытно узнать больше об этом изменении. Авторитетный ответ о том, почему это изменение получит награду.

4b9b3361

Ответ 1

Это была ошибка в Java с 1.3 по 1.6 (разрешено в 1.7).

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4511638 В отчете об ошибке http://bugs.sun.com/view_bug.do?bug_id=4428022 содержится более подробная информация. Исправлено в JDK 7 (b75).

Связанные отчеты - цитируются по ссылке выше.

  • Backport: JDK-2181423 - выходы System.out.println(0.001) 0.0010
  • Дубликат: JDK-5078240 - Double.toString(double) добавляет конечный ноль в некоторых случаях
  • Дубликат: JDK-6575880 - Float.toString(float) добавляет трейлинг нули
  • Отношения: JDK-6935102 - Regtest
    closed/sun/misc/FloatingDecimal/ToString.java теперь не работает.
  • Относится: JDK-4154042 - java.lang.FloatingDecimal может быть устранены

Изменения для OpenJDK 7 для устранения этой проблемы доступны по адресу: http://hg.openjdk.java.net/jdk7/tl/jdk/rev/f85aa3aedf41