簡體   English   中英

將文字分配給 Float 時出現類型不匹配錯誤

[英]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 中,因為DoubleFloat包裝了 java 的doublefloat

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM