Sto costruendo una calcolatrice con BSP. Come ho provato con vari numeri, mi sono imbattuto in un problema che i numeri decimali non vengono visualizzati correttamente.58.85 visualizza come 58.84999999999
Ad esempio. 58,85 -> 58,849999. Ma 58.84 o 58.86 funzionano bene. 58.8471 -> 54.84710000000001. Alla fine, l'ultima cifra digitata verrà salvata dal nulla.
Il mio codice seguente di seguito.
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.
Quello che fondamentalmente faccio è ogni volta un numero viene cliccato, si chiama il metodo "generate_num". Richiede THISNUM, NEWDIGIT, RESULT come parametri.
thisnum = numero corrente (es .: 58.8)
newdigit = numero cliccato (es .: 5)
risultato = numero generato (atteso: 58,85 ma restituisce 58,849999).
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – Mysticial
Sarebbe utile illustrare dove e come risolvere questo problema? –
È una di quelle domande più frequenti che richiedono una spiegazione molto lunga. Lascerò che qualcun altro intervenga o trovi un duplicato adatto per chiuderlo. – Mysticial