为什么Scala 2.11.2给出了科学计数法中浮点数的编译错误?

Zen*_*Zed 10 scala sbt scala-2.11

我刚刚将Scala项目从2.10更新到2.11.2.

对于以下代码:

 if( x < 1.e-150 ) // conditional ops... 
Run Code Online (Sandbox Code Playgroud)

我收到了错误

e不是Int的成员

以前的科学概念已经奏效了.我怀疑这不是2.11的事情,但更可能是升级的一些奇怪,这在很大程度上只是更新sbt文件的情况:

scalaVersion := "2.11.2"
Run Code Online (Sandbox Code Playgroud)

之前的地方:

scalaVersion := "2.10.3"
Run Code Online (Sandbox Code Playgroud)

我想不出可能导致这种情况的原因.我所知道的是它在2.10下工作正常.

有没有人见过这个问题或者可以建议修复?(或新的询问线!)

我正在使用JDK 1.7.0_21和sbt.version=0.13.5.

任何帮助或想法赞赏.

Tra*_*own 18

科学记数法的语法是Scala是一个浮点数,后跟e(或E)和指数.您所看到的问题是什么算作浮点数,并且与科学记数法的语法没有任何关系(尽管这确实会导致错误消息的混乱).

您可以通过启动2.10.4 REPL来确认这一点-deprecation:

scala> val x = 1.
<console>:1: warning: This lexical syntax is deprecated.  From scala 2.11, a dot
         will only be considered part of a number if it is immediately followed
         by a digit.
       val x = 1.
               ^
Run Code Online (Sandbox Code Playgroud)

果然,在2.11中,这根本就不会编译.

您可以通过编写其中一个1e-1501.0e-150两个来完成相同的操作,这两个操作都可以在2.10或2.11中使用.