[RESOLVIDO]Como manter o 0 a direita no result ser

Alguma ideia de como manter o 0 a direita do result set tipo double, pois estou tendo dificuldade.

No banco de dados o campo peso esta assim 0.450, quando puxo o no result set ele vem 0.45; só que eu gostaria que ele viesse 0.450, pois comparo os pesos , e da forma que esta o produto de 0.450g esta sendo igual o de 0.45g, ja tentei usar o DecimalFormat, funcionou do jeito certo mas como string, quando é convertido em double volta o mesmo problema. alguma ideia?

Desde já obrigado.

NumberFormat formatter = new DecimalFormat("0.000");
Locale.setDefault(new Locale("en", "US"));
JOptionPane.showMessageDialog(null, rs.getDouble("peso")); //aqui sai 0.45
JOptionPane.showMessageDialog(null, Double.valueOf(formatter.format(rs.getDouble("peso")).replaceAll(",", "."))); //quando formato 0.45  
formatter.format(rs.getDouble("peso")).replaceAll(",", "."))//aqui sai 0.450

Será que é pq zeros menos significativos não valem nada do lado das casas decimais?

0,45 é igual a 0,450 que é igual a 0,4500 que é igual a 0,45000 que é igual a 0,450000… Seu problema é apenas de formatação, não do dado em si.

1 curtida

Um double (qualquer numero) tal como uma data não tem formato. Como dito acima 0.45, 0.450, 0.4500 são sempre a mesma coisa.
O que tu tem formato é a representação em texto (String) do número.

Nesta linha tu formatas uma String com o número (correto) mas depois voltas a converter para Double. E o número não tem formato. Se queres apresentar com um formato, tens de mostrar a String.

Mas, se dizes que estás a comparar, 0.45 e 0.450 são iguais, excepto se… estiveres (como estás) a usar floating points. Nesse caso, comparar dois números aparentemente iguais pode dar em diferença (porque um deles na verdade pode ser 0.444444444449 ou 0.450000000001).

Uma maneira de resolver este problema é assumir que os números são iguais se o valor absoluto da sua diferença for menor que um valor bastante pequeno:

     if( Math.abs(x - y) < 0.000001) { 
       // números são iguais
     }
1 curtida

na verdade eu preciso comparar os pesos no caso, tipo, tenho o peso de 0.45g e tenho o peso de 0.450g , como eu compararia esses valores como string? poderia me ajudar? Obrigado.

Converta as strings para números e compare-os. Há diversas formas de se fazer.

import java.math.BigDecimal;

public class Exemplo {

    public static void main( String[] args ) {
        
        String n1 = "0.45";
        String n2 = "0.450";
        
        // primitivos
        double dN1 = Double.parseDouble( n1 );
        double dN2 = Double.parseDouble( n2 );
        
        // wrappers
        Double DN1 = Double.valueOf( n1 );
        Double DN2 = Double.valueOf( n2 );
        
        // para precisão absoluta
        BigDecimal bdN1 = new BigDecimal( n1 );
        BigDecimal bdN2 = new BigDecimal( n2 );
        
        
        // comparando a igualdade de doubles
        if ( dN1 == dN2 ) {
            System.out.println( "valores iguais" );
        } else {
            System.out.println( "valores diferentes" );
        }
        
        // comparando a igualdade de Doubles
        if ( DN1.doubleValue() == DN2.doubleValue() ) {
            System.out.println( "valores iguais" );
        } else {
            System.out.println( "valores diferentes" );
        }
        
        if ( DN1.equals( DN2 ) ) {
            System.out.println( "valores iguais" );
        } else {
            System.out.println( "valores diferentes" );
        }
        
        // relação de ordem total de Doubles
        if ( DN1.compareTo( DN2 ) == 0 ) {
            System.out.println( "valores iguais" );
        } else {
            System.out.println( "valores diferentes" );
        }
        
        // comparando a igualdade de BigDecimals
        // cuidado aqui, a diferença de zeros é levada em consideração
        if ( bdN1.equals( bdN2 ) ) {
            System.out.println( "valores iguais" );
        } else {
            System.out.println( "valores diferentes" );
        }
        
        // relação de ordem total de BigDecimals
        if ( bdN1.compareTo( bdN2 ) == 0 ) {
            System.out.println( "valores iguais" );
        } else {
            System.out.println( "valores diferentes" );
        }
        
    }
    
}
1 curtida

se eu converter a string 0.450 ela vai virar 0.45; quando eu executo o result set e vai la e busca o campo do peso que tem 100g ou seja 0.100 armazenado no campo e ele me exibe 0.1, eu precisava ver como fazer pra manter os 0.450g como 0.450 quando pegasse a infomação. Para q mesmo de pois de converter eu possa comparar 0.450g é > que 0.45g.

O pessoal explicou que esses valores são iguais: 0.450g e 0.45g.

É diferente de: 0.450g e 0.045g (aqui sim 0.450 é maior que 0.045)

Olha só o resultado da soma de 0.450 e 0.45:

image

Mas 0.450 gramas não é maior que 0.45 gramas. É igual, ambos equivalem a “quarenta e cinco centésimos de grama”, exatamente o mesmo valor numérico, portanto o mesmo peso. Para as casas decimais, o zero à direita não faz diferença.

Você está confundindo o valor com a apresentação/formato do valor.

Vamos pegar, por exemplo, o número 2. Ele é uma ideia, um conceito, um valor… numérico que representa determinada quantidade.

Eu posso apresentar/formatar esse valor de diversas formas: 2, 2.0, 002, dois, two. Os textos são diferentes (são strings - sequências de caracteres - diferentes), mas o valor numérico que elas representam é o mesmo.

Sendo assim, tanto faz se a string é 0.450 ou 0.45, pois o valor numérico é o mesmo. Então basta fazer o que já informaram: converta para número e compare os valores numéricos.


Complementando: de forma geral, se quer manipular strings que contém números (seja comparando os valores numéricos ou fazendo cálculos com eles, etc), então primeiro você converte tudo para número, faz o que precisa, e depois, caso queira mostrar o resultado em um formato específico, aí vc converte para string.

E se quer controlar a quantidade de casas decimais, dê uma olhada na classe DecimalFormat.

verdade, eu viajei o 0.45 é equivalente a 450g , já 45g seria equivalente a 0.045…,Obrigado pela ajuda.

1 curtida