Loops 在特定的小数位数后停止循环

Loops 在特定的小数位数后停止循环,loops,numbers,double,square-root,Loops,Numbers,Double,Square Root,我有一个不用Math.sqrt方法计算数字平方根的程序。我做了这个,但是。。。。。如果数字不是一个完美的正方形,循环将一直正确地进行,在基本java中,如何使循环在小数位数后停止: 谢谢大家! import java.util.Scanner; public class SquareRootMethod { public static void main(String[] args) { // TODO Auto-generated method stub Scanner s

我有一个不用Math.sqrt方法计算数字平方根的程序。我做了这个,但是。。。。。如果数字不是一个完美的正方形,循环将一直正确地进行,在基本java中,如何使循环在小数位数后停止: 谢谢大家!

import java.util.Scanner;

public class SquareRootMethod {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner sc = new Scanner(System.in);

    System.out.println("Please enter a number to square root: ");
    double Number = sc.nextInt();
    double Answer = FindSquareRoot(Number);
    System.out.println(Answer);



}



public static double FindSquareRoot(double NumberToRoot) 
{

    double Guess = NumberToRoot;
    double GuessAmmount = NumberToRoot;

    do
    { GuessAmmount = GuessAmmount/2;
    if (Guess*Guess >NumberToRoot);
    { Guess = Guess - GuessAmmount; }
    if (Guess*Guess <NumberToRoot)
    {Guess = Guess + GuessAmmount; }
    }
    while (Guess*Guess != NumberToRoot);
    return Guess;

}

}

在数字上设置某种精度如何

public static double findSquareRoot(double numberToRoot) {
    double guess = numberToRoot;
    double guessAmount = numberToRoot;

    do {
        guessAmount = guessAmount / 2;
        if (guess * guess > numberToRoot) {
            guess = guess - guessAmount;
        }
        if (guess * guess < numberToRoot) {
            guess = guess + guessAmount;
        }
    } while (Math.abs((guess * guess) - numberToRoot) > 0.001);

    return guess;
}

诀窍在while line上。

谢谢!它起作用了。。。。。但是。。。我不知道这是怎么回事。你能解释一下while线的作用吗?基本上,你的问题是你的条件:猜猜看NumberToRoot对于某些数字永远不会为真,因此您将遇到一个无限循环。因此,我建议不需要精确的数字匹配,而是计算您想要的数字与guess*guess之间的差。如果根据定义的阈值,它们足够接近,那么我们很高兴并退出循环。这有意义吗?