
欧阳鹏2015年12月7日的浏览量
简介: 今天我收到了一位波兰客户,他说一个APP以英语正常运行,但是当系统语言切换为波兰语时,程序崩溃了. 好吧,我会再维护一次. 好吧,首先将系统语言切换为波兰语,以及如何切换为波兰语. 查看文章我的Android高级之旅------> Android [...
今天,我收到了一位波兰客户java格式化小数,他说一个APP以英语正常运行,但是当系统语言切换为波兰语时,该程序崩溃了. 好的java格式化小数,我会再维护一次.
好的,首先将系统语言切换为波兰语,以及如何切换为波兰语以查看文章
![]()
地址:
================================================ ==================================
错误报告如下:
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: 无效的浮点数: “ 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设计中是否存在缺陷?
================================================ ==================================
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-284576-1.html
美国主子这不是变相承认中国人造岛礁是领土吗
按国际法