Perda decimal

Boa tarde galera!

Estou aqui no trampo e começou a dar um problema numa aplicação porque os valores que estavam sendo enviados ao Mainframe estavam diferente da aplicação…

Repliquei o mesmo problema em um teste…

E testei agora com o BigDecimal…ele tb perde esta casa decimal…

Gostaria de saber o porquê desta perda decimal.

Obrigado…

Ué…se vc tá atribuindo o double pra dentro do long ele perde mesmo o decimal. long não é um tipo ponto-flutuante, logo, não tem casas decimais.

O correto é você atribuir essa conta para um outro double.

Porque o tipo long não é para tipos de ponto flutuante, utilize double ou float.

P.S.: Nem BigDecimal

[quote=Leo]Boa tarde galera!

Estou aqui no trampo e começou a dar um problema numa aplicação porque os valores que estavam sendo enviados ao Mainframe estavam diferente da aplicação…

Repliquei o mesmo problema em um teste…

E testei agora com o BigDecimal…ele tb perde esta casa decimal…

Gostaria de saber o porquê desta perda decimal.

Obrigado…
[/quote]

Você ta passando tudo pra long, que não aceita casas decimais.

Acredito q da seguinte maneira funcionaria:

public class teste {
    public static void main(String[] args) {
        
        
        double numero = 128.2;
        numero = numero * 1000;
        long a = ((long)numero);
        
        System.out.println(a);
    }
}

Assim não perderia a casa decimal.

Desculpa se não fncionar, não deu pra eu testar, mas acho que não daria problema.

pafuncio, eu antes multiplico por 1000…

você chegou a fazer o teste? Me explica pq o numero 128.2 vira 128199
e porque o numero 128.1 vira 128100

Paulo, não funcionou…

Utilizei de outra maneira o BigDecimal e funcionou.

[code]public class teste {
public static void main(String[] args) {
double valor = 128.1994;
BigDecimal numero = new BigDecimal(valor);
numero = numero.multiply(new BigDecimal(1000));
numero = numero.setScale(0, BigDecimal.ROUND_HALF_UP);
System.out.println(numero.longValue());

}

}[/code]

Cara um conselho, use sempre BigDecimal pra esse tipo de conta.
Você verá que 128.1 * 1000 não é 128100.

Segue abaixo exemplo.


import java.math.BigDecimal;

public class teste {
    public static void main(String[] args) {

        double numero = 128.1;
        BigDecimal a = new BigDecimal(numero).multiply(new BigDecimal(1000));
        System.out.println(a);
    }
}