Retorno estranho em variavel double

bom dia criei o topico pela madrugada porém ele não está aparecendo se eu repetir o topico por favor me desculpem. criei um programa que converte algumas medidas
ele pega os valores depois converte em milimetros e converte novamente para a saida desejada pelo usuario antes funcionava correto porém agora ele fica incluindo no resultado E-6 entre outros com o mesmo prefixo só mudando o numero;
Ex - 10m + 10m = 20.E-6"M" - o M e do resultado mas o E-6 é alguma coisa que não faço ideia;
olha o print do resultado

desde já agradeço a ajuda.

Posta o código fonte
Imagens não costumam ajudar em nada
:slight_smile:

1 curtida

Segue o codigo fonte do programa, agora a função que está apresentando essa anomalia é o void metodo_misto. de agora já peço desculpas pelo meu codigo kkkkkk eu não estudo a área mas coloco em pratica para fazer umas coisas que me ajudem no dia a dia, o codigo pode ser meio confuso;

import javax.swing.JOptionPane;
import javax.swing.UIManager;

package programadeteste;

public class Programadeteste {

    public static void main(String[] args) {
// tradução da UI do JOPTIONPANE
UIManager.put("OptionPane.cancelButtonText", "Cancelar");
UIManager.put("OptionPane.noButtonText", "Não");
UIManager.put("OptionPane.yesButtonText", "Sim");
// Mensagem Incial
        JOptionPane.showMessageDialog(null, "Conversão 1.0\nDesenvolvido por:"
                + " Eduardo Cipriano");
// Chamando menu principal        
        new Programadeteste().metodo();
    }
    //------------------------- metodo de seleção -----------------------------
public void metodo(){
String menu;
menu = JOptionPane.showInputDialog(null, "DIGITE O PARAMETRO DE CONVERSAO\n"
        + "1 - CM para MM\n2 - MM para CM\n3 - CM para Polegadas\n4 - Polegadas para CM"
        + "\n8 - Parametro Misto");
int menu1 = Integer.parseInt(menu);
if(menu1 == 1){
    conv_cm_mm();
    }
if(menu1 == 2){
    conv_mm_cm();
}
if(menu1 == 3){
    conv_cm_pl();
}
if(menu1 == 4){
    conv_pl_cm();
}
//if(menu1 > 4){
  //  JOptionPane.showMessageDialog(null, "Digite um metodo Valido");
   // metodo();
//}
if(menu1 == 8){
    metodo_misto();
}
if(menu1 == JOptionPane.CANCEL_OPTION){
    System.exit(0);
}
}
// --------------- conversor de cm para mm -------------------------------------
    public void conv_cm_mm(){
        String c1_cm;
        c1_cm = JOptionPane.showInputDialog(null,"Digite o Valor em CM");        
        double c1_cm1 = Double.parseDouble(c1_cm);
      double c1_r = c1_cm1*10;
      JOptionPane.showMessageDialog(null, c1_cm1 + " CM equivale a " +c1_r +" MM");
      double c1_final = JOptionPane.showConfirmDialog(null,"Desejar Converter"
              + " com os mesmos parametros ?","Conversão 1.0",JOptionPane.YES_NO_CANCEL_OPTION);
      if(c1_final == JOptionPane.YES_OPTION){
          conv_cm_mm();
      }
      if(c1_final == JOptionPane.NO_OPTION){
          metodo();
      }
      if(c1_final == JOptionPane.CANCEL_OPTION){
          System.exit(0);
      }
    }
    //--------------- conversor de mm para cm ----------------------------------
    public void conv_mm_cm(){
    String c1_cm;
    c1_cm = JOptionPane.showInputDialog(null,"Digite o Valor em MM");        
    int c1_cm1 = Integer.parseInt(c1_cm);
    int c1_r = c1_cm1/10;
    JOptionPane.showMessageDialog(null, c1_cm1 + " MM equivale a " +c1_r +" CM");
    int c1_final = JOptionPane.showConfirmDialog(null,"Desejar Converter"
              + " com os mesmos parametros ?","Conversão 1.0",JOptionPane.YES_NO_CANCEL_OPTION);
    if(c1_final == JOptionPane.YES_OPTION){
          conv_mm_cm();
      }
    if(c1_final == JOptionPane.NO_OPTION){
          metodo();
      }
    if(c1_final == JOptionPane.CANCEL_OPTION){
          System.exit(0);
    }
}
    public void conv_cm_pl(){
    JOptionPane.showMessageDialog(null,"O Sistema Internacional de"
            + " Unidades (SI),\n não recomenda utilização da polegada\n"
            + "A norma internacional ISO 80000-4, cuja versão brasileira atual é a ABNT NBR ISO 80000-4:2007\n"
            + "Também renega as unidades não recomendadas");
    String c1_cm;
    c1_cm = JOptionPane.showInputDialog(null,"Digite o Valor em CM");        
    double c1_cm1 = Double.parseDouble(c1_cm);
    double c1_r = c1_cm1/2.54;
    JOptionPane.showMessageDialog(null, c1_cm1 + " CM equivale a " +c1_r +" Polegadas");
    int c1_final = JOptionPane.showConfirmDialog(null,"Desejar Converter"
              + " com os mesmos parametros ?","Conversão 1.0",JOptionPane.YES_NO_CANCEL_OPTION);
    if(c1_final == JOptionPane.YES_OPTION){
          conv_cm_pl();
      }
    if(c1_final == JOptionPane.NO_OPTION){
          metodo();
      }
    if(c1_final == JOptionPane.CANCEL_OPTION){
          System.exit(0);
    }
}
    public void conv_pl_cm(){
        JOptionPane.showMessageDialog(null,"O Sistema Internacional de"
            + " Unidades (SI),\n não recomenda utilização da polegada\n"
            + "A norma internacional ISO 80000-4, cuja versão brasileira atual é a ABNT NBR ISO 80000-4:2007\n"
            + "Também renega as unidades não recomendadas");
    String c1_cm;
    c1_cm = JOptionPane.showInputDialog(null,"Digite o Valor em Polegadas");        
    double c1_cm1 = Double.parseDouble(c1_cm);
    double c1_r = c1_cm1*2.54;
    JOptionPane.showMessageDialog(null, c1_cm1 + " Polegadas equivale a " +c1_r +" CM");
    int c1_final = JOptionPane.showConfirmDialog(null,"Desejar Converter"
              + " com os mesmos parametros ?","Conversão 1.0",JOptionPane.YES_NO_CANCEL_OPTION);
    if(c1_final == JOptionPane.YES_OPTION){
          conv_pl_cm();
      }
    if(c1_final == JOptionPane.NO_OPTION){
          metodo();
      }
    if(c1_final == JOptionPane.CANCEL_OPTION){
          System.exit(0);
    }
    }
    public void metodo_misto(){
        JOptionPane.showMessageDialog(null, "Bem Vindo ao Metodo Misto\n"
                + "Instruções\n"
                + "1 - Digite o valor da medida\n" // medida1
                + "2 - Escolha a Unidade de Medida correspondente\n" // primeiromenu
                + "3 - Escolha O metodo de Soma ou Subtração\n" //somaousub
                + "4 - Digite a Segunda Medida\n" //medida2
                + "5 - Escolha a unidade da segunda medida\n" //segundomenu
                + "6 - Defina a Medida de saida");
        //----------------------------------------------------------------------
        double medida1,medida2;
        int cm,mm,pl,m,primeiromenu,somaousub,segundomenu;
                
        String valor1 = JOptionPane.showInputDialog(null,"Digite o valor da medida");
        medida1 = Double.parseDouble(valor1);
        String selecaounidade1 = JOptionPane.showInputDialog(null,"Digite o valor referente a unidade\n"
                + "1 - M\n"
                + "2 - CM\n"
                + "3 - MM\n"
                + "4 - Polegadas");
        primeiromenu = Integer.parseInt(selecaounidade1);
        String selecaooperacao = JOptionPane.showInputDialog(null,"Operação\n"
                + "1 - Soma\n"
                + "2 - Subtração");
        somaousub = Integer.parseInt(selecaooperacao);
        String valor2 = JOptionPane.showInputDialog(null,"Digite o valor da segunda medida");
        medida2 = Double.parseDouble(valor2);
        String selecaounidade2 = JOptionPane.showInputDialog(null,"Digite o valor referente a segunda unidade\n"
                + "1 - M\n"
                + "2 - CM\n"
                + "3 - MM\n"
                + "4 - Polegadas");
        segundomenu = Integer.parseInt(selecaounidade2);
        
      //----------- Conversão de unidades recebidas para MM --------------------
      double conv1,conv2; // variaveis que serao armazenadas os valores convertidos 
      conv1 = 0;
      conv2 = 0;
      String[] unidades;
      unidades = new String[8];
     if(primeiromenu == 1){
          //conversao da primeira medida M em MM
        conv1 = medida1 / 1000; 
        unidades[0] = "M";
     }
     if(primeiromenu == 2){
         // conversao da primeira medida CM em MM
         conv1 = medida1 / 100;
         unidades[1] = "CM";
     }
     if(primeiromenu == 3){
         //conversao da primeira medida MM em MM
         conv1 = medida1;
         unidades[2] = "MM";
     }
     if(primeiromenu == 4){
         //conversao da primeira medida de PL em MM
         double interno1 = medida1 * 2.54;
         conv1 = interno1 / 100;
         unidades[3] = "Polegadas";
     }
     // ---------------------- fim da primeira medida --------------------------
     // ---------------------- conversao da segunda medida ---------------------
    if(segundomenu == 1){
          //conversao da segunda medida M em MM
        conv2 = medida2 / 1000; 
        unidades[4] = "M";
     }
     if(segundomenu == 2){
         // conversao da segunda medida CM em MM
         conv2 = medida2 / 100;
         unidades[5] = "CM";
     }
     if(segundomenu == 3){
         //conversao da segunda medida MM em MM
         conv2 = medida2;
         unidades[6] = "MM";
     }
     if(segundomenu == 4){
         double interno2 = medida2 * 2.54;
         conv2 = interno2 / 100;
         unidades[7] = "Polegadas";
     }
//--------------------- fim das conversoes de medidas --------------------------
//============================= inicio da soma =================================
double finalvalorsoma; // variavel da conv1 + conv2;
finalvalorsoma = 1;
if(somaousub == 1){
    finalvalorsoma = conv1 + conv2;
}
//========================= Inicio da subtração=================================
if(somaousub == 2){
    finalvalorsoma = conv1 - conv2;
}
// ======================== fim da soma ou subtração ===========================
//====================== inicio mensagem verificação ---------------------------
String medidaver,medidaver1;
medidaver = "a";
medidaver1 = "a";
if(primeiromenu == 1){
    medidaver = unidades[0];
}
if(primeiromenu == 2){
    medidaver = unidades[1];
}
if(primeiromenu == 3){
    medidaver = unidades[2];
}
if(primeiromenu == 4){
    medidaver = unidades[3];
}
//-------------- final atribuição da primeira medida ---------------------------
if(segundomenu == 1){
    medidaver1 = unidades[4];
}
if(segundomenu == 2){
    medidaver1 = unidades[5];
}
if(segundomenu == 3){
    medidaver1 = unidades[6];
}
if(segundomenu == 4){
    medidaver1 = unidades[7];
}
//============= final atribuição da segunda medida ==========================
//============= verificação da operação ======================================
String operacaover;
operacaover = "a";
if(somaousub == 1){
    operacaover = "\b+";
}
if(somaousub == 2){
    operacaover = "\b-";
}
// ================= final da verificação da operação =========================
//============== inicio do JOPTIONPANE DE VALOR =============================
    JOptionPane.showMessageDialog(null,""+medida1 +" "+ medidaver + " " + operacaover + " " + 
            medida2 +" "+ medidaver1);
//============= final do JOPTIONPANE DE VALOR =================================
// ======================== inicio menu final ==================================
String menufinal = JOptionPane.showInputDialog(null,"Digite a Unidade de Saida\n"
        + "1 - M\n"
        + "2 - CM\n"
        + "3 - MM\n"
        + "4 - Polegadas");
int menufinal1 = Integer.parseInt(menufinal);
// ------------- parte final ---------------------------------------------------
if(menufinal1 == 1){
    //resultado final de MM para M
    double r_mm_m = finalvalorsoma / 1000;
    JOptionPane.showMessageDialog(null,"E igual a\n" + r_mm_m +" M");
}
if(menufinal1 == 2){
    //resultado final de MM para CM
    double r_mm_cm = finalvalorsoma / 100;
    JOptionPane.showMessageDialog(null,"E igual a\n" + r_mm_cm +" CM");
}
if(menufinal1 == 3){
    //resultado final de MM para MM
    double r_mm_mm = finalvalorsoma;
    JOptionPane.showMessageDialog(null,"E igual a\n" + r_mm_mm +" MM");
}
if(menufinal1 == 4){
    //resultado final de MM para polegadas
    double r_mm_pl = finalvalorsoma * 100; // transformando MM para CM
    double interno3;
    interno3 = r_mm_pl / 2.54;
    JOptionPane.showMessageDialog(null,"E igual a\n" + interno3 +" Polegadas");
}
//----------------------- fim da parte final ----------------------------------
//---------------------- JOPTION DA TROCA DE PARAMETRO ------------------------
int c1_final = JOptionPane.showConfirmDialog(null,"Desejar Converter"
              + " com os mesmos parametros ?","Conversão 1.0",JOptionPane.YES_NO_CANCEL_OPTION);
    if(c1_final == JOptionPane.YES_OPTION){
          metodo_misto();
      }
    if(c1_final == JOptionPane.NO_OPTION){
          metodo();
      }
    if(c1_final == JOptionPane.CANCEL_OPTION){
          System.exit(0);
    }
//--------------------- FIM DA TROCA DE PARAMETRO -----------------------------
} // fim do void
}// fim do programa

como eu faço para deixar todo o codigo dentro de um box ?
não estou conseguindo =\ fica apenas uma parte

Edita seu post, seleciona o código e clica no botão </> :slight_smile:

1 curtida

editei amigo , obrigado ;D

Algumas considerações:

1 - Quando você faz um if (condição == x) e depois um if (condição == y), o programa faz as duas comparações. Se os valores de somaousub são constantes como 1 e 2, você pode fazer algo como

if (somaousub == 1) {
  // executa o código
} else {
  // executa outro código
}

Se existir a possibilidade de somaousub receber um valor diferente, você pode fazer um else if, da seguinte forma:

if (somaousub == 1) {
// executa código
} else if (somaousub == 2) {
// executa outro código
} else {
// executa outro código
}

2 - Pesquise por JFrame e JavaFX, se você desenhar uma tela pro seu programa, não vai precisar abrir sempre que precisar fazer uma conversão.

3 - Tente fazer a comparação: [quote=“Felipe_Silva1, post:3, topic:349325”]
String menufinal = JOptionPane.showInputDialog(null,“Digite a Unidade de Saida\n”
+ “1 - M\n”
+ “2 - CM\n”
+ “3 - MM\n”
+ “4 - Polegadas”);
int menufinal1 = Integer.parseInt(menufinal);
[/quote]

Usando o método .equals() da classe String, com ela você pode comparar o valor da sua variável com o valor de uma outra String, que você vai passar no método, algo como:
String menufinal = JOptionPane.showInputDialog(null,“Digite a Unidade de Saida\n”
+ “1 - M\n”
+ “2 - CM\n”
+ “3 - MM\n”
+ “4 - Polegadas”);

if (menufinal.equals("1"){

double r_mm_m = finalvalorsoma / 1000;
JOptionPane.showMessageDialog(null,“E igual a\n” + r_mm_m +" M");

4 - Quanto ao seu problema, não vou conseguir testar agora, mas acredito que o seu problema pode estar nas atribuições de finalvalorsoma[quote=“Felipe_Silva1, post:3, topic:349325”]
double finalvalorsoma; // variavel da conv1 + conv2;
finalvalorsoma = 1;
if(somaousub == 1){
finalvalorsoma = conv1 + conv2;
}
//========================= Inicio da subtração=================================
if(somaousub == 2){
finalvalorsoma = conv1 - conv2;
}
[/quote]

Tente fazer um debug linha a linha, usando o System.out.println() mesmo, imprimindo o valor das variáveis no console e visualizando se em algum momento existe um erro de conversão.

Acredito que na parte da tarde eu consiga executar seu código, e te dou uma resposta mais precisa quanto a isso.

1 curtida

2.0e-6 é o mesmo que 2 vezes 10 elevado à -6, esse é o ‘toString’ para tipos double.

1 curtida

usando o método .equals() da classe String, com ela você pode comparar o valor da sua variável com o valor de uma outra String, que você vai passar no método, algo como:
String menufinal = JOptionPane.showInputDialog(null,“Digite a Unidade de Saida\n”
+ “1 - M\n”
+ “2 - CM\n”
+ “3 - MM\n”
+ “4 - Polegadas”);

if (menufinal.equals("1"){

double r_mm_m = finalvalorsoma / 1000;
JOptionPane.showMessageDialog(null,“E igual a\n” + r_mm_m +" M");

4 - Quanto ao seu problema, não vou conseguir testar agora, mas acredito que o seu problema pode estar nas atribuições de finalvalorsoma[quote=“Felipe_Silva1, post:3, topic:349325”]
double finalvalorsoma; // variavel da conv1 + conv2;
finalvalorsoma = 1;
if(somaousub == 1){
finalvalorsoma = conv1 + conv2;
}
//========================= Inicio da subtração=================================
if(somaousub == 2){
finalvalorsoma = conv1 - conv2;
}
[/quote]

Tente fazer um debug linha a linha, usando o System.out.println() mesmo, imprimindo o valor das variáveis no console e visualizando se em algum momento existe um erro de conversão.

Acredito que na parte da tarde eu consiga executar seu código, e te dou uma resposta mais precisa quanto a isso.
[/quote]

Opa Bom dia , Obrigado pela ajuda
Vou da uma pesquisada sobre oq vc me informou faz tempo que não faço nada, é aprendi tudo na internet ai sou muito leigo.
tou relembrando os conceitos do JFrame para unificar isso ai é melhorar esse codigo tbm
não tinha pensando no debug vou fazer isso obrigado amigo :blush:

entendi a função , mas não entendo o pq do programa executar desta forma

Porque essa é a forma de representar o tipo double como String, conforme está descrito aqui

Se quer representar diferente, terá de utilizar a classe DecimalFormat ou o método String.format.

1 curtida

mas o joptionpane mostra a variavel double em si, é tipo ele mostrava corretamente foi durante os testes que começou a aparecer tal resultado; mas acho que captei oq vc quer dizer vou da uma lida no assunto, também tou desenvolvendo uma interface grafica para eliminar esses IF’s todos kkkkkk
Obrigado pelo apoio[quote=“staroski, post:11, topic:349325, full:true”]

Porque essa é a forma de representar o tipo double como String, conforme está descrito aqui

Se quer representar diferente, terá de utilizar a classe DecimalFormat ou o método String.format.
[/quote]

Não é uma interface gráfica que vai resolver esses if’s, é a forma de programar.
Você comentou que está aprendendo sozinho, acho isso sensacional, parabéns!
O próximo passo seria estudar boas formas e técnicas de programar, você verá que conseguirá programar de forma mais fácil e o melhor de tudo é que seus códigos ficarão mais legíveis para outros entenderem.

1 curtida

obrigado eu vejo as videoaulas do professor Neri Neitzki, sei bem pouca coisa eu entendi oq vc passou vou estudar esse metodo de formatação para ele exibir apenas os valores padrão tipo formatar o valor todo dependendo da ação desejada tipo metros 0,00 Centimetros 0.000 e milesimos 0.0000 , ai com certeza deve corrigir o problema ai vou implementar também polegada fracionaria ai vou estudar o metodo de comparação que o amigo de cima falou também se não me perco com a infinidade de variaveis que serão.

Obrigado pelo apoio ;D

Procure também pelas aulas do curso de Orientação à Objetos do canal Curso em Vídeo, a didática é meio pausada, mas acredito que vai te ajudar bastante nessas questões de lógica e limpeza de código.

Outra dica, se você for comparar um valor várias vezes, pode usar o switch…case, o código fica mais enxuto e legível

1 curtida

bom dia,
Obrigado pela dica amigo :blush:

Os conteúdos são bons do Professor Neri ? Estava vendo os cursos dele são um pouco antigos.