2016-03-21 6 views
2

Ich versuche, die Quadratwurzel einer Zahl innerhalb von .000001 der Zahl gerundet zu bekommen. Zum Beispiel sqrt von 10 = 3.1622766 ..... mit einem Doppel. Ich habe das, aber abgerundet auf 3.162267 ist das Problem, das ich habe. Ich muss eine Schleife verwenden und kann keine Klassen verwenden. Vielen Dank JaredAbrufen einer Zahl zum Runden mit einer Schleife anstelle einer Klasse in Java

import java.util.Scanner; 

public class squareRoot { 
    public static void main(String[] args) { 
     Scanner kb = new Scanner(System.in); 
     System.out.println("Please enter a non-negative integer."); 
     int myInt = kb.nextInt(); 
     { 
      double testNum; 
      double squareRoot = myInt/2; 
      do { 
       testNum = squareRoot; 
       squareRoot = (testNum + (myInt/testNum))/2; 
      } 
      while (squareRoot - (testNum * testNum) > .000001); 
      System.out.println("\nThe square root of " + myInt + " is " + squareRoot); 
     } 
    } 
} 
+0

Oh wow, diese Vertiefungen sind * wirklich * verwirrend. – Andreas

Antwort

0

Das Problem ist, dass dieser Algorithmus verwendet wird, gibt es ein Element der Fehler auf den letzten Stellen, so dass Sie die Anzahl der signifikanten Zahlen erhöhen könnte, und dann um auf die gewünschte Anzahl:

double myDouble = kb.nextDouble(); 
{ 
    double testNum; 
    double squareRoot = myInt/2; 
    do 
    { 
     testNum=squareRoot; 
     squareRoot = (testNum + (myInt/testNum))/2; 
    } 
    while(Math.abs(myDouble - (testNum * testNum)) > .00000001);//←decrease the error here 

    //round squareRoot down to the num of decimals you want   

    System.out.println("\nThe square root of " + myDouble + " is " + squareRoot); 
    } 
} 
0

Sie können Ihre eigene round() Methode schreiben und es statt Build in Java-Klassen verwenden:

private static double round(double number, int places){ 
    double result; 
    if(number == (int) number){ 
     return number; 
    } 
    result = (int) number; 
    int multiplier = 1; 
    for(int i = 0 ; i < places ; i++){ 
     multiplier*= 10; 
    } 
    double fraction = number - (int)number; 
    result = result + ((int)(multiplier * fraction))*1.0/multiplier; 
    return result; 
} 

public static void main(String[] args) { 
    double d = 1.6546213; 
    System.out.println(round(d, 2)); 
} 
Verwandte Themen