今天接到一個波蘭的客戶說有個APP在英文狀态下一切運作正常,但是當系統語言切換到波蘭語言的時候,程式奔潰了。好吧,又是我來維護。
好吧,先把系統語言切換到波蘭語,切換到波蘭語的方法檢視文章
我的Android進階之旅------>Android【設定】-【語言和輸入法】-【語言】清單中找到相應語言所對應的清單項
位址:http://blog.csdn.net/ouyang_peng/article/details/50209789
====================================================================================
報錯如下:
D/AndroidRuntime( 9067): Shutting down VM
E/AndroidRuntime( 9067): FATAL EXCEPTION: main
E/AndroidRuntime( 9067): Process: com.runbo.outdoormeter, PID: 9067
E/AndroidRuntime( 9067): java.lang.NumberFormatException: Invalid float: "1019,35"
E/AndroidRuntime( 9067): at java.lang.StringToReal.invalidReal(StringToReal.java:63)
E/AndroidRuntime( 9067): at java.lang.StringToReal.initialParse(StringToReal.java:164)
E/AndroidRuntime( 9067): at java.lang.StringToReal.parseFloat(StringToReal.java:323)
E/AndroidRuntime( 9067): at java.lang.Float.parseFloat(Float.java:306)
E/AndroidRuntime( 9067): at java.lang.Float.valueOf(Float.java:343)
E/AndroidRuntime( 9067): at com.runbo.outdoormeter.service.DataService.onSensorChanged(DataService.java:66)
E/AndroidRuntime( 9067): at android.hardware.SystemSensorManager$SensorEventQueue.dispatchSensorEvent(SystemSensorManager.java:405)
E/AndroidRuntime( 9067): at android.os.MessageQueue.nativePollOnce(Native Method)
E/AndroidRuntime( 9067): at android.os.MessageQueue.next(MessageQueue.java:148)
E/AndroidRuntime( 9067): at android.os.Looper.loop(Looper.java:151)
E/AndroidRuntime( 9067): at android.app.ActivityThread.main(ActivityThread.java:5637)
E/AndroidRuntime( 9067): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 9067): at java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime( 9067): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
E/AndroidRuntime( 9067): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
好吧,數字格式異常,java.lang.NumberFormatException: Invalid float: "1019,35" ,怎麼浮點型1019.35就變成了1019,35 小數點(".")變成了逗号(“,”)。檢視源代碼,代碼如下:
LocationApplication.dangxia_qiya=event.values[0];
Log.i("sensor","senser is running 1.....");
float a1=LocationApplication.dangxia_qiya;
String aa1=String.format("%.2f",a1);
Log.i("sensor","a1="+a1);
Log.i("sensor","aa1="+aa1);
LocationApplication.dangxia_qiya=Float.valueOf(aa1);
運作時,列印日志:
C:\Documents and Settings\Administrator>adb logcat -s sensor
--------- beginning of system
--------- beginning of main
I/sensor ( 8175): senser is running 1.....
I/sensor ( 8175): a1=1019.00757
I/sensor ( 8175): aa1=1019,01
這說明,得到的a1參數是正常的,隻是通過String.format方法轉換後,就變成了1019,01。坑爹啊!将系統語言切換為英文,再列印下日志,如下:
C:\Documents and Settings\Administrator>adb logcat -s sensor
--------- beginning of system
--------- beginning of main
I/sensor ( 8648): senser is running 1.....
I/sensor ( 8648): a1=1019.01685
I/sensor ( 8648): aa1=1019.02
好吧,得到的a1參數是正常的,aa1也是正常的1019.02。
好吧,看了代碼後,感覺用String.format來格式化浮點型數字真心不給力。這個保留小數點後兩位的問題還是用其他方法來解決吧。将代碼改成下面代碼後一切正常。
LocationApplication.dangxia_qiya=event.values[0];
Log.i("sensor","senser is running 1.....");
float a1=LocationApplication.dangxia_qiya;
//String aa1=String.format("%.2f",a1);
//Log.i("sensor","a1="+a1);
//Log.i("sensor","aa1="+aa1);
//LocationApplication.dangxia_qiya= Float.valueOf(aa1);
float aa1 = (float)(Math.round(a1*100))/100;
Log.i("sensor","a1="+a1);
Log.i("sensor","aa1="+aa1);
LocationApplication.dangxia_qiya=aa1;
不知道String.format()這樣的錯誤,是不是java設計時候的一個缺陷呢?
====================================================================================
作者:歐陽鵬 歡迎轉載,與人分享是進步的源泉!
轉載請保留原文位址:
http://blog.csdn.net/ouyang_peng