JAVA:可能会失去精确度

时间:2013-07-31 08:51:51

标签: java double precision floating

我在JAVA中编写了以下方法:

public static float surface(float r)
    {
        return(4*Math.PI*Math.pow(r,2));
    }

当我运行该类时,我收到以下错误:

possible loss of precision
required: float; found: double

我在文档中看到Math.pow需要double才能工作。如果我需要使用float,我该怎么办?

为了测试,我尝试了以下方法,它给出了同样的错误:

public static float surface(float r)
    {
        return(4*Math.PI*r*r);
    }

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您需要输入演员doublefloat

public static float surface(float r)
{
    return (float)(4*Math.PI*Math.pow(r,2));
}

请查看Narrowing Primitive Conversion

答案 1 :(得分:1)

Math.PI定义为double。由于您要返回float,因此必须从double转换为float“任何地方” - 这可能会导致精度下降。

修改:BTW:考虑使用BigDecimal代替doublefloat。如果您使用“BigDecimal”和“float”作为网络搜索的关键字,您会发现很多文章涉及这个主题,解释了每种方法的优缺点。