当前位置: 代码迷 >> Java相关 >> long i <= Math.sqrt(data)不同数据类型的比较为什么没有警告?
  详细解决方案

long i <= Math.sqrt(data)不同数据类型的比较为什么没有警告?

热度:982   发布时间:2009-07-21 14:10:01.0
long i <= Math.sqrt(data)不同数据类型的比较为什么没有警告?
public static void main(String[] args)
    {
        boolean flag = true;
        System.out.print("Please input the number:");
        Scanner input = new Scanner(System.in);
        long data = input.nextLong();
        
        System.out.println("The square root of "+data+" is "+Math.sqrt(data));
        
        // 这儿有点不明白,i <= Math.sqrt(data)不同数据类型的比较为什么没有警告
        for(long i = 2; i <= Math.sqrt(data); i ++)

        {
            if(data%i == 0)
            {
                flag = false;
                break;
            }
        }
        
        if(flag)
            System.out.println(data+" is a prime.");
        else
            System.out.println(data+" is not a prime.");
    }
搜索更多相关的解决方案: long  

----------------解决方案--------------------------------------------------------
感觉就是一个类型!不知道我看懂了么?
1: long data = input.nextLong();
2:for(long i = 2; i <= Math.sqrt(data); i ++)
都是long型 的。
如我没看懂和话,请别怪我。
----------------解决方案--------------------------------------------------------
我查JSE API 文档,上面说Math.sqrt()的返回值是double类型的。

public static double sqrt(double a)返回正确舍入的 double 值的正平方根。特殊情况是:
    如果参数是 NaN 或小于零,那么结果是 NaN。
    如果参数是正无穷大,那么结果就是正无穷大。
    如果参数是正零或负零,那么结果与参数相同。
否则,结果是最接近该参数值的真实数学平方根的 double 值。
----------------解决方案--------------------------------------------------------
我觉得<=符号会自动转型,将两个不同类型的数转型后再进行比较
就像=赋值一样,也有自动转型
----------------解决方案--------------------------------------------------------
  相关解决方案