このコード スニペットを使用して文字列を double に変換する Android アプリケーションが市場に出回っています。文字列には、それが実際の 10 進数値であるかどうかを確認するための検証があります。ほとんどの場合、これは問題なく実行されますが、例外がスローされることがあります。これはローカリゼーションの問題であり、米国英語を使用していないデバイスで発生していると確信しています。
[ほとんどの場合、値 = 0 であることがわかっています。]
これが私のコードです。if else ブロックのコードが例外をスローします。
DecimalFormatSymbols symbols = new DecimalFormatSymbols(new Locale("en", "en"));
symbols.setDecimalSeparator('.');
DecimalFormat df = new DecimalFormat("#.##", symbols);
double temperature = Double.valueOf(numberString);
if (tempUnits.equals("f")) {
mBBTValue.setText(df.format(temperature) + " °F");
} else {
mBBTValue.setText(df.format(getTemperatureInCelcius(temperature) + " °C"));
}
このコードは、一部の国で次の例外をスローしています。
java.lang.IllegalArgumentException
at java.text.NumberFormat.format(NumberFormat.java:304)
at java.text.DecimalFormat.format(DecimalFormat.java:702)
at java.text.Format.format(Format.java:93)
at com.mysa.DetailsActivity$InitTask.onPostExecute(DayDataDetailsActivity.java:543)
at com.mysa.DetailsActivity$InitTask.onPostExecute(DayDataDetailsActivity.java:1)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:4787)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
at dalvik.system.NativeStart.main(Native Method)
誰かがこのコードで私が間違っていることを説明してもらえますか?