Estoy construyendo una calculadora con BSP. Cuando lo probé con varios números, me encontré con el problema de que los números decimales no se muestran correctamente.58.85 muestra como 58.84999999999
Por ejemplo. 58.85 -> 58.849999. Pero 58.84 o 58.86 funcionan bien. 58.8471 -> 54.84710000000001. Al final, el último dígito mecanografiado se guardará de la nada.
Mi código siguiente.
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.
Lo que yo hago es básicamente cada vez que se hace clic en un número, se llama al método "generate_num". Toma THISNUM, NEWDIGIT, RESULT como parámetros.
thisnum = número actual (por ejemplo: 58,8)
newdigit = número hecho clic (por ejemplo: 5)
resultado = número generado (esperado: 58,85 pero devuelve 58.849999).
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – Mysticial
¿Sería útil si ilustra dónde y cómo resolver este problema? –
Es una de esas preguntas frecuentes que necesita una explicación muy larga. Dejaré que alguien más intervenga o encuentre un duplicado adecuado para cerrar. – Mysticial