2011-05-15 6 views
0

今日私のAndroidアプリをマーケットにアップロードしました。NumberFormatException,Double.parseDoubleDouble.valueOfに関して4つのエラーが発生しました。NumberFormatException - Android

は、ここで私はデベロッパーコンソールに表示さLogcatです:

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) 

ここでエラーが発生した関数は、(ログによる)だ -

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

私はdは、二重であることを知っています。

また、これは私の電話機(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言語のユーザーがアプリケーションを使用しているときにエラーが発生する可能性があります。私はこの問題を抱えていた。小数点の代わりにカンマを使用します( '。'の代わりに '、')。これは何度も私を投げ捨てました

関連する問題