2013-04-04 28 views
23

Tôi đang nâng cấp từ JDK6 to JDK7. Các mã sau đây chứng minh cho thấy một sự thay đổi nhỏ trong Double.toString()Java7 Double.toString() trả về 0,005/java6 là 0,0050

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

Tôi đang tìm kiếm bất kỳ tài liệu liên quan đến sự thay đổi trên. Trang tương thích không bao gồm nó.

5.0E-4 
0.005 //changed. 
0.05 
0.5 

Kết quả được lưu trong nhiều tệp tham chiếu và so sánh bằng so sánh chuỗi - tôi cần sửa so sánh nhưng tò mò muốn biết thêm chi tiết về thay đổi này. Câu trả lời có thẩm quyền về lý do tại sao thay đổi này sẽ nhận được tiền thưởng.

+3

Một phao phân tích lỗi trong Java có thể gây ra trình biên dịch để đi trong một vòng lặp vô hạn là hơi thú vị hơn, mặc dù. http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/ – devnull

Trả lời

28

Đây là lỗi trong Java 1.3 đến 1.6 (được giải quyết trong 1.7).

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4511638 Báo cáo lỗi http://bugs.sun.com/view_bug.do?bug_id=4428022 chứa thêm chi tiết. Sửa lỗi trong JDK 7 (b75).

Báo cáo có liên quan- Được trích dẫn từ liên kết ở trên.

  • backport: JDK-2.181.423 - System.out.println (0,001) kết quả đầu ra 0,0010
  • trùng lặp: JDK-5.078.240 - Double.ToString (kép) cho biết thêm một trailing zero trong những trường hợp nhất định
  • trùng lặp: JDK-6575880 - Float.toString (float) cho biết thêm trailing số không
  • Liên quan: JDK-6.935.102 - Regtest
    đóng/CN/misc/FloatingDecimal/ToString.java nay thất bại.
  • Liên quan: JDK-4.154.042 - java.lang.FloatingDecimal có thể loại bỏ

Những thay đổi cho OpenJDK 7 để khắc phục vấn đề này có sẵn tại địa chỉ: http://hg.openjdk.java.net/jdk7/tl/jdk/rev/f85aa3aedf41

+0

Cảm ơn! Thật tuyệt. – Jayan