Java 将文字指定给浮点时出现类型不匹配错误

Java 将文字指定给浮点时出现类型不匹配错误,java,scala,math,floating-point,double,Java,Scala,Math,Floating Point,Double,我明确指定了一个float类型。这段代码产生了一个错误。为什么? 目前,我使用的是scala v2.12.8 scala> val f: Float = 3.0 <console>:11: error: type mismatch; found : Double(3.0) required: Float val f: Float = 3.0 scala>val f:Float=3.0 :11:错误:类型不匹配; 发现:双(3.0) 必需:浮动 val f

我明确指定了一个
float
类型。这段代码产生了一个错误。为什么?

目前,我使用的是scala v2.12.8

scala> val f: Float = 3.0
<console>:11: error: type mismatch;
 found   : Double(3.0)
 required: Float
       val f: Float = 3.0
scala>val f:Float=3.0
:11:错误:类型不匹配;
发现:双(3.0)
必需:浮动
val f:浮动=3.0

要有一个浮点数,您必须在浮点数后面加上一个
f

scala> val f: Float = 3.0f
f: Float = 3.0
默认情况下,浮点数为
双精度
,如例外情况所示

发件人(由Mario Galic提供):

当后跟浮点数时,浮点文字的类型为Float 点类型后缀F或F,否则为双精度类型


使用以下代码:

val f: Float = 3f
如果不添加
f
后缀,变量将被视为双精度变量

java中也发生了同样的事情,因为
Double
Float
分别覆盖了java的
Double
Float

jshell> float f = 3.0
|  Error:
|  incompatible types: possible lossy conversion from double to float
|  float f = 3.0;
|            ^-^

jshell> float f = 3.0f
f ==> 3.0

Scala 3(Dotty)中已修复此行为:

它不会推断将导致有损转换的文本的类型:

scala> Seq(3.14f, 2147483646)
val res2: Seq[AnyVal] = List(3.14, 2147483646)

scala> Seq(3.14f, 2147483647)
val res3: Seq[Float] = List(3.14, 2147483647)
当需要有损转换时,有一个公开的通知单可以发出警告,但一般来说,它工作得很好

scala> Seq(3.14f, 2147483646)
val res2: Seq[AnyVal] = List(3.14, 2147483646)

scala> Seq(3.14f, 2147483647)
val res3: Seq[Float] = List(3.14, 2147483647)