以下代码段在第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吗?答案 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;