![](/img/trans.png)
[英]Type mismatch error when assigning a variable to an object of the same type
[英]Type mismatch error when assigning literal to Float
我明確指定了一個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
使用以下代碼:
val f: Float = 3f
如果不加f
后綴,該變量將被視為 double。
這是同樣的事情,發生在 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
要擁有 Float,您必須以f
為后綴:
scala> val f: Float = 3.0f
f: Float = 3.0
默認情況下,浮點數是一個Double
作為例外建議。
從浮點文字(由 Mario Galic 提供):
浮點文字在后跟浮點類型后綴 F 或 f 時屬於 Float 類型,否則屬於 Double 類型。
此行為已在 Scala 3 (Dotty) 中修復:
Starting dotty REPL...
Dotty compiler version 0.22.0-RC1 -- Copyright 2002-2020, LAMP/EPFL
scala> val x: Float = 3.14
val x: Float = 3.14
scala> Seq(3.14, 1)
val res0: Seq[Double] = List(3.14, 1.0)
scala> Seq[Float](3.14, 1)
val res1: Seq[Float] = List(3.14, 1.0)
它不會推斷會導致有損轉換的文字類型:
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)
當需要進行有損轉換時,有一個公開的票證會發出警告,但總的來說它工作得很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.