在Java中检查一个双精度浮点数是否为无穷大

31

我正在为作业制作一个简单的计算器,当除以0时,Java会返回“无穷大(Infinity)”。

我需要在得到无穷大时显示一些错误信息。问题是我不知道如何编写条件语句。

double result;
result = 4/0;
//if result == infinity then some message - need help with this

1
жҚ•иҺ·ArithmeticExceptionпјҢжЈҖжҹҘйҷӨж•°жҳҜеҗҰдёәйӣ¶гҖӮжҳҫзӨәй”ҷиҜҜж¶ҲжҒҜгҖӮ - Nishant
你为什么要得到无穷大而不是一开始就停止除法呢? - Toomai
啊,我刚刚删除了我的评论,虽然它不是数学上的正确。 - soulcheck
尽管如此,这是两个不同的问题:处理无穷大和处理除以零(如果操作数是双精度,则不是错误)。 - soulcheck
6
4.0/0.0 => 无穷大4/0 是整数运算,会产生一个异常。 - Peter Lawrey
7个回答

69
你可以使用 Double.isInfinite(double) 来判断是否为无限大。
这是一个关于 double 数据类型的文档链接:double doc

5
上述代码会生成:
ArithmeticException: / by zero

您可以在 try/catch 块中捕获此异常。

2
Double类中有两个无穷大的字段:POSITIVE_INFINITYNEGATIVE_INFINITY,您可以进行检查。
请注意,整数除以零会抛出ArithmeticException异常,因此您的代码行必须是4.0/04/0.04.0/0.0,因为4和0是整数,因此会导致整数运算。

1
请检查它是否等于Double.POSITIVE_INFINITY。
double result;
result = 4.0 / 0.0;

我相信,那不是他想要的。他想看到一个错误。 - Peter Lawrey

1

因为这个问题在我的Java课程中出现了,所以我希望你能重新审视一下这个古老的问题。我相信你已经尝试了像他们建议的try/catch方法,但是你会发现,就像我一样,它不能用于Double。由于返回“Infinity”而不是异常,所以对于DoubleFloat,带有ArithmeticException的try/catch无法使用。(注意,删除了我的旧“答案”,因为它不是一个答案)。

通过拼凑一些不同的问题/答案,我得出了以下结果。

public class trial
{
  public static void main(String[] args)
  {
      double a;
     try {
          a = 4/0;
         System.out.println(" The answer is " +a);
      } catch(ArithmeticException e) {
     System.out.println(" You can't divide by zero. Please try again.");
      }
  }
}

上面的代码应该会给你一个结果是“答案是无穷大”。至少对我来说是这样,因为它是一个双精度浮点数(double)。
如果使用整型(int),它不需要下面的if语句,因为它会抛出异常。但由于它是Double类型,下面的if语句会导致它抛出异常,而catch语句将捕获它。
public class trial
{
public static void main(String[] args)
  {
      double a;
          try {
        a = 4/0;
   // if statement to throw an AtithmeticException if ans equals infinity
      if(a == Double.POSITIVE_INFINITY){
          throw new ArithmeticException();

        }
        else{

          System.out.println(" The answer is " +a);
        }

  } catch(ArithmeticException e) {
     System.out.println(" You can't divide by zero. Please try again.");
    }
  }
}

0

Jacek Kwiecień试试这段代码

double result;
try{
    result=4.0/0.0;
}catch(ArithmeticException e){

    System.out.println("Math error "+ e.getMessage())
}

`


-1
这种错误被称为异常。您可以使用try-catch块来捕获此异常。
 try{
      result = 4/0;
 }
 catch(ArithmeticException e){
     System.out.println("You divided by zero");
 }

你可以在这里阅读有关异常处理的内容。


如果你只是在寻找特定的异常,请不要捕获通用异常。 - Bobby
更好的做法是,当一个简单的测试可以更好地完成任务时,不要捕获异常。 - giusti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接