2011-05-15 3 views
0

오늘 Android 앱을 Market에 업로드했으며 NumberFormatException,Double.parseDoubleDouble.valueOf과 관련된 4 개의 오류가 발생했습니다. -NumberFormatException - Android

public static double roundTwoDecimals(double d) { 
    DecimalFormat twoDForm = new DecimalFormat("#.###"); 
return Double.valueOf(twoDForm.format(d)); 
} 

내가 d 두 번 것을 알고

java.lang.RuntimeException: Unable to start activity ComponentInfo{can.you.drive/can.you.drive.do_drive}: java.lang.NumberFormatException 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1816) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1837) 
at android.app.ActivityThread.access$1500(ActivityThread.java:132) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1033) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:143) 
at android.app.ActivityThread.main(ActivityThread.java:4196) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NumberFormatException 
at org.apache.harmony.luni.util.FloatingPointParser.parseDblImpl(Native Method) 
at org.apache.harmony.luni.util.FloatingPointParser.parseDouble(FloatingPointParser.java:283) 
at java.lang.Double.parseDouble(Double.java:318) 
at java.lang.Double.valueOf(Double.java:356) 
at can.you.drive.dont_drive.roundTwoDecimals(dont_drive.java:132) 
at can.you.drive.do_drive.onCreate(do_drive.java:125) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1780) 

여기 (로그에 따라) 오류가 발생하는 기능이있다 :

는 여기가 개발자 콘솔에서 볼 수있는 로그 캣입니다.

또한 내 휴대 전화 (Nexus S 2.3.4)에서 정상적으로 작동합니다. 다른 사용자로부터 오류가 발생했습니다. 그게 내가 정말로 그것을 디버깅 할 수없는 이유입니다.

나는 정말로 내 핸드폰이 어떤 휴대폰에 있는지 알지 못한다.

+0

132 번 라인의 dont_drive.java에있는 내용은 무엇입니까? – Aleadam

답변

1

나는 오류가 발생하는 플랫폼에서 소수 구분 기호가 아닌 .과 함께 현지화와 관련이 있다고 말하고 싶습니다. 덜 비싼 반올림 방법을 사용하지 않는 이유는 무엇입니까?

public double round(double d, int nDecimals) 
{ 
    for(int i=0; i<nDecimals; ++i) d *= 10d; 
    d=Math.round(d); 
    for(int i=0; i<nDecimals; ++i) d /= 10d; 
    return d; 
} 
+0

감사합니다. 그 방법은 대부분의 경우 작동하는 것 같습니다. 그러나 때로는 출력이 0.02899999999999998인데, 0.029이어야합니다. 왜 그런 일이 일어나는 지 아십니까? – Tofira

+0

부동 소수점 값이 메모리에 표시되는 방식 때문에 발생합니다. 그 중 대다수는 정확하게 'double'로 표현 될 수 없습니다. 나는 당신이 부동 소수점 데이터 구조를 통해 표현하지 않는 한 그것에 대한 해결 방법을 가질 수 있다고 생각하지 않는다. 그것은 모두 당신이하고자하는 것에 달려 있습니다. – entonio

0

디버깅하려면 코드가 변경 될 때마다 변수를 뱉어내는 코드 전체에 System.out.println()을 추가하십시오. gdb와 같은 도구보다 쉽습니다.

1

try catch 블록을 사용하여 처리하십시오.

1

아마도 Deutsch 언어의 사용자가 응용 프로그램을 사용할 때 오류가 발생합니다. 나는이 문제를 겪었다. 소수점 대신 쉼표를 사용합니다 ('.'대신 ','). 이것은 여러 번 나를 쫓아 버렸습니다

관련 문제