Estou fazendo um programa que calcula perimetro de uma reta foramado por dois pontos no plano cartesiano.
A formula para isso é Raiz((x2-x1)² + (y2-y1)²) … oque estou fazendo errado ???
Por exemplo Raiz((4-1)² + (5-1)²) o resultado seria 5, mas ele imprime o resultado como 4,899.
[code]            String txtP1X = this.tf_P1X.getText();
float valorP1X = Float.parseFloat(txtP1X);
        String txtP1Y = this.tf_P1Y.getText();
        float valorP1Y = Float.parseFloat(txtP1Y);
        String txtP2X = this.tf_P2X.getText();
        float valorP2X = Float.parseFloat(txtP2X);
        
        String txtP2Y = this.tf_P2Y.getText();
        float valorP2Y = Float.parseFloat(txtP2Y);
        result = (float) (Math.sqrt((Math.pow(2, (valorP2X-valorP1X))) + (Math.pow(2, (valorP2Y-valorP1Y)))));
        
        new SalvarFigura().setVisible(true);
        ID++;
        System.out.printf("Resultado: %.3f ",result);[/code]
         
        
          
        
           
           
           
         
         
            
            
          
       
      
        
        
          Cara não sei se é isso realmente. Mas tente usar BigDecimal para operações com números decimais, não float.
A forma de usar, por exemplo é:
[code]BigDecimal numero1 = new BigDecimal(“10.8”);
BigDecimal numero2 = new BigDecimal(“10.5”);
BigDecimal resultado = numero1.multiply(numero2);
[/code]
Meio verboso, mas funciona.
         
        
        
           
           
           
         
         
            
            
          
       
      
        
        
          [quote=fredericomaia10]Cara não sei se é isso realmente. Mas tente usar BigDecimal para operações com números decimais, não float.
A forma de usar, por exemplo é:
[code]BigDecimal numero1 = new BigDecimal(“10.8”);
BigDecimal numero2 = new BigDecimal(“10.5”);
BigDecimal resultado = numero1.multiply(numero2);
[/code]
Meio verboso, mas funciona.[/quote]
Não entendi como isso aplicaria no meu programa e como isso poderia me ajudar.
Tem como fazer essa modificação no código que postei lá em cima ???
         
        
        
           
           
           
         
         
            
            
          
       
      
        
        
          Eu acho que o problema está acontecendo porque a ordem dos parâmetros passados para a função pow está invertido. O primeiro parâmetro é a base e o segundo parâmetro é o expoente.
Deveria ser:
float result = (float) (Math.sqrt((Math.pow((valorP2X-valorP1X),2 )) + (Math.pow((valorP2Y-valorP1Y),2))));
(Utilizando seu exemplo a expressão ficaria: ((4-1)² + (5-1)²) = 5)
e não:
float result = (float) (2,Math.sqrt((Math.pow((valorP2X-valorP1X))) + (2, Math.pow((valorP2Y-valorP1Y)))));
(Utilizando seu exemplo a expressão ficaria: (2^(4-1)) + (2^(5-1)) = 4.899)
Espero ter ajudado em algo…  
         
        
        
           
           
           
         
         
            
            
          
       
      
        
        
          [quote=ingridmarcal]Eu acho que o problema está acontecendo porque a ordem dos parâmetros passados para a função pow está invertido. O primeiro parâmetro é a base e o segundo parâmetro é o expoente.
Deveria ser:
float result = (float) (Math.sqrt((Math.pow((valorP2X-valorP1X),2 )) + (Math.pow((valorP2Y-valorP1Y),2))));
(Utilizando seu exemplo a expressão ficaria: ((4-1)² + (5-1)²) = 5)
e não:
float result = (float) (2,Math.sqrt((Math.pow((valorP2X-valorP1X))) + (2, Math.pow((valorP2Y-valorP1Y)))));
(Utilizando seu exemplo a expressão ficaria: (2^(4-1)) + (2^(5-1)) = 4.899)
Espero ter ajudado em algo…   [/quote]
 [/quote]
Valeu cara, problema resolvido !!
Novo pipino aqui …
Oque tem de errado aqui ???
[code]    private void jB_PerimetroActionPerformed(java.awt.event.ActionEvent evt) {
String txtRID = this.tf_RID.getText();
int valorRID = Integer.parseInt(txtRID);
    int nID = IDTotal[valorRID];
    int cont;
    if(nID == 1)
    {
        cont = 0;
        while(valorRID != IDCirculo[cont])
        {
            cont++;
        }
        String Valor = String.valueOf(VetorCirculo[cont]); 
        ValorPerimetro.setText(Valor);
    }
    
    else if(nID == 2)
    {
        cont = 0;
        while(valorRID != IDReta[cont])
        {
            cont++;
        }
        String Valor = String.valueOf(VetorReta[cont]); 
        ValorPerimetro.setText(Valor);
    }
    
    else if(nID == 3)
    {
        cont = 0;
        while(valorRID != IDTriangulo[cont])
        {
            cont++;
        }
        String Valor = String.valueOf(VetorTriangulo[cont]); 
        ValorPerimetro.setText(Valor);
    }
}[/code]