天天看點

我的Android進階之旅------>Android【設定】-【語言和輸入法】-【語言】清單中找到相應語言所對應的清單項  我的Android進階之旅------>Android【設定】-【語言和輸入法】-【語言】清單中找到相應語言所對應的清單項  

    今天接到一個波蘭的客戶說有個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

繼續閱讀