在Android上使用Groovy错误的双重浮动精度损失

时间:2016-06-16 07:49:43

标签: java groovy

我遇到的问题最终是一个错误。我正在使用Android Studio上的Groovy编写Android应用程序。它给出了与以下代码相关的奇怪的编译错误:

def foo(float s) {
    s = s / 2  // compilation error with pointer at '/' position
    s = s.toFloat() / 254  // no error
}

即使函数中的第一行与最后一行交换,也会发生编译错误。

我还在命令行上的Android Studio外部的本地Groovy 1.8.6环境中尝试了代码。它没有任何错误。

谁能解释我这种不正常的行为?这是正常的吗?是否有更聪明的方法来规避这个?我应该向Groovy发送错误票吗?

我正在使用Android Studio 2.1.2和Oracle JVM 1.8.0_92以及以下gradle依赖项:

classpath 'com.android.tools.build:gradle:1.5.0'
classpath 'org.codehaus.groovy:gradle-groovy-android-plugin:0.3.10'
compile   'org.codehaus.groovy:groovy:2.4.6:grooid'

修改:以下是Android Studio的编译错误:

/path/to/androidproject/Bar.groovy: 199: [Static type checking] - Possible loss of precision from double to float
@ line 199, column 19.
           s = s / 2
                 ^

编辑2 :以下代码甚至可以在Android上编译:

def foo(float s) {
    s = s * 2
}

1 个答案:

答案 0 :(得分:2)

尝试:

s = s / 2.0f

s = (float) (s / 2)