10

我最近刚刚将 Scala 项目从 2.10 更新到 2.11.2。

对于以下代码:

 if( x < 1.e-150 ) // conditional ops... 

我收到错误

e 不是 Int 的成员

以前的科学概念运作良好。我怀疑这不是 2.11 的事情,但更可能是升级有些奇怪,这在很大程度上只是更新 sbt 文件的情况:

scalaVersion := "2.11.2"

以前的位置:

scalaVersion := "2.10.3"

我想不出可能是什么原因造成的。我所知道的是它在 2.10 下运行良好。

有没有人以前见过这个问题或可以提出解决方案?(或新的查询线!)

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

任何帮助或想法表示赞赏。

4

1 回答 1

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.
               ^

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

1e-150您可以通过编写或来完成完全相同的事情1.0e-150,这两者都可以在 2.10 或 2.11 中工作。

于 2014-09-12T10:40:29.527 回答