float变量初始化java

时间:2013-08-25 03:48:32

标签: java

以下代码段在第1行给出了编译器错误。

public abstract class xyz
{

    float Gamma = 20.0; //Line 1
    public class Alpha
    {
        void Beta()
        {
            System.out.println("this is atest");
        }
    }
}



abc0.java:5: error: possible loss of precision
        float density = 20.0;
                        ^
  required: float
  found:    double
2 errors

根据我的理解,float用于十进制变量。

我是否遗漏了一些显而易见的东西,或者我是否必须始终使用强制转换初始化?

编辑:我知道'f'最后可以用于浮点变量,但它是MANDATORY吗?

6 个答案:

答案 0 :(得分:5)

浮点文字被视为double,除非您指定它们只是float。 (同样,除非另有说明,否则整数文字为int。)将数字f附加到数字上,使其成为float

float density = 20.0f;

JLS对于文字值有comprehensive typing rules。不,您不必使用float将文字设为f,但如果您希望将其放在(float)中,则必须使用float进行转换。变量,因为Java不会自动尝试将多种类型的数据推送到范围较小的变量中。

答案 1 :(得分:2)

应该是

float density = 20.0f;

答案 2 :(得分:1)

浮动密度= 20.0f;

如果你试图指定一个十进制数字,你必须在末尾放置一个“f”,否则Java会假设你正在尝试分配一个双.A。double会更准确地覆盖你可以输入的更多数字。

答案 3 :(得分:1)

根据JLS, §3.10.2,除非指定为double,否则所有浮点文字都会被解释为float

  

浮点文字的类型为float,如果后缀为ASCII字母F或f;否则其类型为double,并且可以选择以ASCII字母D或d为后缀(§4.2.3)。

将您的声明更改为:

float density = 20.0f;

一般情况下,请考虑一下您使用float的原因 - 它的精确度低于double,并且几乎不会经常使用。

答案 4 :(得分:1)

  

根据我的理解,float用于十进制变量。

没有。具有分数部分的数字文字默认被视为双精度。

答案 5 :(得分:0)

在Java中,默认情况下,十进制值存储为double。但是要将其存储为浮点数,我们需要明确声明,例如

float varName = 10.0f;或float varName =(float)10.0;