Jump to content
Box

Resultado inexato de uma subtração???

Recommended Posts

Box

Prezados amigos,

Sou principiante nisso e gostava de pedir se alguém sabe porque não consigo um resultado exacto com o código abaixo:

package testecontas_002;
public class TesteContas_002 {
    public static void main(String[] args) {
       
        double n1 = 1067.58;
        double n2 = 0;

        double total_01 = n1 + n2;
 
        double n3 = 180;
        double n4 = 0;
        double n5 = 0;
        double n6 = 0;
        double n7 = 0;
        
        double total_02 = n3 + n4 + n5 + n6 + n7;
        
        double total_03 = total_01 - total_02;
        
        System.out.println(total_01);
        System.out.println(total_02);
        System.out.println(total_03);

    }
}

Resultado:

run:
1067.58
180.0
887.5799999999999
BUILD SUCCESSFUL (total time: 0 seconds)

887.5799999999999 ??? como pode ser?

Não devia ser 887.58 exatamente?

Agradecia alguma ajuda para descobrir onde errei o código.

Obrigado desde já.

Share this post


Link to post
Share on other sites
Box
Em 07/12/2018 às 08:49, HappyHippyHippo disse:

se deveria ser o valor exacto de 887.58 ? não

porquê ? ... isso é uma história bem comprida ...

o que te posso dizer, e para não me estender muito é leres sobre o assunto : https://en.wikipedia.org/wiki/Floating-point_arithmetic

Obrigado pelo link para este artigo, ele responde de facto á minha pergunta, mas gostava de além disso ter uma dica de como posso alterar o meu código para que o resultado seja exacto, é que esta pequena aplicação serve para fazer a reconciliação de contas e a possibilidade de gerar um erro de mais ou menos um cêntimo pode ser um problema.

Obrigado :)

Share this post


Link to post
Share on other sites
Rui Carlos

Podes usar a classe BigDecimal para teres resultados exactos.  Se só precisas de representar centimos (duas casas decimais), outra hipótese é usares int/long que guardam valores em centimos (e ao mostrares os valores fazes a conversão de unidade).

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.