Por que a divisão JSP / JSTL em 1000, por vezes, dar restante?
-
05-07-2019 - |
Pergunta
Ao dividir por 1000 eu em algum momento deparar com um bug que não faz a divisão "corretamente". Por exemplo, quando dividindo 90,55 em 1000 em vez de ficar 0,09055 eu recebo 0,090549999999.
<c:out value="${bean.paPrice / 1000}" />
Por que isso está acontecendo? É este o resultado de matemática de ponto flutuante? Uma busca no Google parecia indicar que este pode ser um culpado, mas eu não encontrei nenhuma resposta concreta.
Para corrigir isso eu posso completar a resposta a 5 dígitos, mas parece que este é apenas um patch para um problema mais profundo.
<fmt:formatNumber type="number" maxFractionDigits="5" value="${bean.paPrice / 1000}" />
Solução
Não é um problema, é apenas um resultado natural da representação binária de ponto flutuante. Rodada seus valores e não se preocupe com isso.
Outras dicas
Por que computadores péssimo em matemática?
Sim, esta é uma comum de ponto flutuante questão formato .