java中’Float a = 3f’和’Float a = 3.0’有什么区别?

如果我表演

97346822*3f, result is 2.9204048E8, 

然而

  97346822*3.0 gives me 2.92040466E8. 

请解释。

数字3.0double值的文字表示 (它相当于3.0d ),而3.0f是一个float值。 不同的精度解释了为什么你得到不同的结果 – 使用64位存储doublefloat使用32位。

 97346822*3.0 

将被视为double

基于oracle教程

双数据类型是双精度64位IEEE 754浮点。 其值范围超出了本讨论的范围,但在Java语言规范的浮点类型,格式和值部分中指定。 对于十进制值,此数据类型通常是默认选择。

 97346822*3f 

将被视为float

这些是与这个问题相关的发现和我的答案。

虽然3.0和3f在放入浮点值时都具有相同的值,但实际值用作浮点运算的工作存储器。 作为乘法一部分的内部值不适合浮点值本身并被修改,导致获得的结果之间的差异为14.0。

Java中有一个名为Numeric promotion的概念

数字促销用于将数字运算符的操作数(如乘法等操作)转换为公共类型(较小的数字类型到操作数的2种数据类型中的较大数值类型)以执行特定操作

因此,在您给出的示例中,对于97346822*3f因为3f是一个浮点值,因此浮点运算完成,结果是浮点类型。

但3.0是双重类型,具有更高的范围和精度,导致结果变化

所以3.0和3f的值是相同的,但是当在数值运算中使用这些值时,结果将根据另一个操作数的数据类型而变化