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)