2016-06-16 1 views
3

결국 버그가 발생한 문제가 있습니다. Android Studio에서 Groovy로 Android 앱을 프로그래밍하고 있습니다. 그것은 다음과 같은 코드에 대해 나에게 이상한 컴파일 에러를 제공합니다안드로이드에서 Groovy로 두 배의 정밀도를 잃어 버리는 실수가 있습니다.

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에 버그 티켓을 보내야합니까?

나는 오라클 JVM 1.8.0_92과 안드로이드 스튜디오 2.1.2을 사용하여 다음과 같은 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' 

편집는 :

/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 
} 

답변

2

시도 : 내 아주 큰 놀랍게도

s = s/2.0f 

또는

s = (float) (s/2) 
+0

, 당신의 두번째 코드 예제가 작동합니다! 하지만 첫 번째 이유는 무엇입니까? 나는 이미 그것을 시도 했는가? –

+0

분명히, 두 피연산자가 'float'이라도 구분은 항상 'double'을 산출합니다. 이상한! 's = (float) s/(float) 2;' – AhmadWabbi

+0

그래서's = (float) s/(float) 2;의 결과는 무엇입니까? – AhmadWabbi

관련 문제