当我使用float时,为什么java强制我添加f?

当我使用float时,为什么java强制我添加f?,java,Java,我对编程很陌生。我有以下代码: float f = 18.45f; 这个很好用。如果我将其更改为: float f = 18.45; java将此称为错误: error: possible loss of precision 但它在双方面是可选的。但是在long中,我又面临着同样的问题 为什么java强制我这么做,但不是在double的情况下?在java中,18.45是一种double数据类型,包含64位浮点数据类型最多只能容纳32位。添加额外的f使其成为浮点(float literal)

我对编程很陌生。我有以下代码:

float f = 18.45f;
这个很好用。如果我将其更改为:

float f = 18.45;
java将此称为错误:

error: possible loss of precision
但它在
方面是可选的。但是在
long
中,我又面临着同样的问题


为什么java强制我这么做,但不是在
double
的情况下?

在java中,
18.45
是一种
double
数据类型,包含64位<代码>浮点
数据类型最多只能容纳32位。添加额外的
f
使其成为浮点(float literal)


有关详细信息,请参阅。

double
是浮点数的默认类型
18.45
隐含着一个
double
更大的问题是,既然double更精确,为什么还要使用float呢?我唯一一次使用浮点是当一个方法参数需要浮点来进行适当的重载时。这样人们就不会经常来堆栈溢出来询问为什么Java中的浮点乘法被破坏。@R.MartinhoFernandes这就是
BigDecimal
的用途。尽管如此,这是一个很好的答案,+1:)真正令人惊讶的不是得票率上升,而是这是唯一的答案。我是说,可能性有多大?回答这样的问题通常需要十几篇相同的帖子。因此,即使是
long
默认情况下也是
double
?@Tom通常在这里,代表性最高的答案获得更多的支持票,而其他人则没有。@sriram
long
是一个整数(例如
12L
),而
double
是一个浮点数(例如
12.34
)。还要注意的是,
12
int
不是
长的
@Eng.Fouad你慢慢地,但不可避免地滚进了一个Jon Skeet