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

时间:2013-07-25 18:22:27

标签: java floating-point double literals

如果我执行

  97346822*3f, result is 2.9204048E8,

然而

 97346822*3.0 gives me 2.92040466E8.

请解释。

4 个答案:

答案 0 :(得分:7)

数字3.0double值的literal representation(相当于3.0d),而3.0ffloat值。不同的精度解释了为什么你得到不同的结果 - double使用64位存储,float使用32位。

答案 1 :(得分:3)

97346822*3.0

将被视为double

基于oracle tutorial

  

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

97346822*3f

将被视为float

答案 2 :(得分:0)

这些是与this question相关的调查结果以及我对此的回答。

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

答案 3 :(得分:0)

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

  

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

所以在你给出的例子中,对于97346822*3f,因为3f是一个浮点值,所以浮点运算完成,结果是float类型。

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

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