【问题标题】:JAVA : possible loss of precisionJAVA:可能会丢失精度
【发布时间】:2013-07-31 08:51:50
【问题描述】:

我用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);
    }

感谢您的帮助。

【问题讨论】:

    标签: java double precision floating


    【解决方案1】:

    您需要将 double 类型转换为 float

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

    请关注Narrowing Primitive Conversion

    【讨论】:

      【解决方案2】:

      Math.PI 定义为double。由于您要返回 float,因此必须将 double 转换为 float "anywhere" - 这可能会丢失精度。

      编辑:顺便说一句:考虑使用BigDecimal 而不是doublefloat。如果您使用“BigDecimal”和“float”作为网络搜索的关键字,您会发现很多文章都在讨论这个主题,解释了每种方法的优缺点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-17
        • 1970-01-01
        • 1970-01-01
        • 2016-03-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多