Retornando valor errado

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… :smiley:

[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… :smiley: [/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]