如果我有一个数a=0.3333333333333333;
另一个数是b=1/3.0;
我如何判断出a是一个有穷数,而b是一个无穷数呢?

解决方案 »

  1.   

    isInfinite
    public boolean isInfinite()如果这个 Float 值的大小是无穷大,则返回 true,否则返回 false。 返回:
    如果这个对象表示的值是正无穷大或负无穷大,则返回 true;否则返回 false。
      

  2.   

    答:你能否使用BigDecimal呢?用它到可以判是不是无穷数呢。
    如:
    BigDecimal b1=new BigDecimal(1),
            b2=new BigDecimal(3);
            try{
            b1=b1.divide(b2, MathContext.UNLIMITED);//1/3无穷数,抛出异常来抓。
            }catch(ArithmeticException e)
            {
             System.out.println("无限数值。");
            }
      

  3.   

    try
    {
    BigDecimal d = new BigDecimal(1).divide(new BigDecimal(3));
    }
    catch (ArithmeticException e)
    {
    String msg = e.getMessage();
    if (msg.indexOf("Non-terminating") > -1)
    {
    System.out.println("Non-terminating");//无穷
    }
    }
      

  4.   

    谢谢,就如上面两位所言,不过我想说的是看来是否是无穷的只有在除这个动作发生的时候才知道,而如果用double存起来之后,就不能判断了对吧
      

  5.   

    如果你要进行四舍五入,你看看 NumberFormat,这个可以实现你想要的.
      

  6.   

    答:我想,“如果用double存起来之后,就不能判断了对吧”,是的。因为都已经存起来了,就不是无穷了。
      

  7.   

    支持2楼,首先计算机里你是怎样存储1/3的,如果已经存储为小数,那么肯定就无所谓有穷无穷了,因为已经写死在里面了,如果说是分子分母分别存储,要判断能否除尽,那么很简单,因为分数肯定是有理数,也就是有限小数或无限循环小数,只要做足够精度的除法,如使用BigDecimal尝试找到循环节就解决了