Perda decimal

6 respostas
L

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…

6 Respostas

Adriano_Almeida

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.

thiago.correa

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

P.S.: Nem BigDecimal

P

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…

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.

L

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

L

Paulo, não funcionou....

Utilizei de outra maneira o BigDecimal e funcionou.

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());
        
    }
}
amilhoranza

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);
    }
}
Criado 30 de janeiro de 2007
Ultima resposta 30 de jan. de 2007
Respostas 6
Participantes 5