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]
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]