Tôi đang xây dựng một máy tính có BSP. Khi tôi thử nghiệm nó với các số khác nhau, tôi gặp phải vấn đề là các số thập phân không hiển thị chính xác.58.85 hiển thị dưới dạng 58.84999999999
Ví dụ: 58,85 -> 58,849999. Nhưng 58,84 hoặc 58,86 làm việc tốt. 58.8471 -> 54.84710000000001. Cuối cùng chữ số được gõ cuối cùng sẽ được lưu ra khỏi hư không.
Mã của tôi sau đây.
method GENERATE_NUM.
DATA: lv_digi type I. * number of digits after the decimal point
call METHOD me->get_decimal
RECEIVING
getdigits = lv_digi.
*if it is a natural number
IF lv_digi = 0.
IF thisnum < 0.
result = thisnum * 10 - newdigit.
ELSE.
result = thisnum * 10 + newdigit.
ENDIF.
*if it is a float number
Else.
IF thisnum < 0.
result = thisnum - (newdigit/10 ** lv_digi).
ELSE.
result = thisnum + (newdigit/10 ** lv_digi).
ENDIF.
*increase the number of decimal point by 1
call method me->set_decimal.
ENDif.
endmethod.
Điều tôi làm về cơ bản là mỗi khi một số được nhấp, nó gọi phương thức "generate_num". Mất THISNUM, NEWDIGIT, RESULT làm tham số.
thisnum = số hiện tại (ví dụ: 58.8)
newdigit = số nhấp chuột (ví dụ: 5)
kết quả = số được tạo (dự kiến: 58,85 nhưng trả về 58,849999).
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – Mysticial
Sẽ hữu ích nếu bạn minh họa vị trí và cách giải quyết vấn đề này? –
Đây là một trong những câu hỏi thường gặp cần giải thích rất dài. Tôi sẽ để người khác bước vào hoặc tìm một bản sao phù hợp để đóng. – Mysticial