Vì vậy, khi tôi cộng hoặc trừ trong Java với Doubles, nó cho tôi kết quả lạ. Đây là một số:Cộng và trừ đôi được cho kết quả lạ
Nếu tôi thêm 0.0 + 5.1
, nó cho tôi 5.1
. Đúng rồi.
Nếu tôi thêm 5.1 + 0.1
, nó cung cấp cho tôi 5.199999999999
(Số lượng lặp lại 9
có thể bị tắt). Sai rồi.
Nếu tôi trừ 4.8 - 0.4
, nó cho tôi 4.39999999999995
(Xin nhắc lại, số 9
có thể bị tắt). Sai rồi.
Lúc đầu, tôi nghĩ đây chỉ là vấn đề với việc tăng gấp đôi giá trị thập phân, nhưng tôi đã sai. Những điều sau đây đã làm việc tốt:
5.1 + 0.2 = 5.3
5.1 - 0.3 = 4.8
Bây giờ, số đầu tiên được thêm là một lần lưu đôi là biến, mặc dù biến thứ hai lấy văn bản từ JTextField
. Ví dụ:
//doubleNum = 5.1 RIGHT HERE
//The textfield has only a "0.1" in it.
doubleNum += Double.parseDouble(textField.getText());
//doubleNum = 5.199999999999999
btw, thích sử dụng BigDecimal (http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html) – user2147970
Thực ra, 5.19999999 ... (với nhiều lần lặp lại 9 lần) là toán học chính xác giống như 5.2, nếu bạn không tin, hãy cố gắng tìm ra sự khác biệt giữa hai yếu tố này. Nó là 0, do đó, chúng giống nhau. – Ingo
@ Về mặt kỹ thuật, vâng, nhưng tôi muốn có một câu trả lời chính xác một chút :) –