我的Android进阶之旅------>Java字符串格式化方法String.format()格式化float型时小数点变成逗号问题
今天接到一个波兰的客户说有个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
====================================================================================
我的Android进阶之旅------>Java字符串格式化方法String.format()格式化float型时小数点变成逗号问题的更多相关文章
- 我的Android进阶之旅------>Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换)
Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换) 有时候要做出如下所示的展示文件大小的效果时候,需要对文件大小进行转换,然后再进行相关的代码逻辑编写. 下面是一个Java ...
- 我的Android进阶之旅------>Java全角半角的转换方法
一中文全角和半角输入的区别 1全角指一个字符占用两个标准字符位置 2半角指一字符占用一个标准的字符位置 3全角与半角各在什么情况下使用 4全角和半角的区别 5关于全角和半角 6全角与半角比较 二转半角 ...
- 我的Android进阶之旅------>解决Jackson等第三方转换Json的开发包在开启混淆后转换的实体类数据都是null的bug
1.错误描述 今天测试人员提了一个bug,说使用我们的app出现了闪退的bug,后来通过debug断点调试,发现我们的app转换服务器发送过来的json数据后,都是为null.而之前已经提测快一个月的 ...
- 我的Android进阶之旅------>如何解决Android 5.0中出现的警告: Service Intent must be explicit:
我的Android进阶之旅-->如何解决Android 5.0中出现的警告: java.lang.IllegalArgumentException: Service Intent must be ...
- 我的Android进阶之旅------>Android利用温度传感器实现带动画效果的电子温度计
要想实现带动画效果的电子温度计,需要以下几个知识点: 1.温度传感器相关知识. 2.ScaleAnimation动画相关知识,来进行水印刻度的缩放效果. 3.android:layout_weight ...
- 我的Android进阶之旅------>Android实现用Android手机控制PC端的关机和重启的功能(三)Android客户端功能实现
我的Android进阶之旅------>Android实现用Android手机控制PC端的关机和重启的功能(一)PC服务器端(地址:http://blog.csdn.net/ouyang_pen ...
- 我的Android进阶之旅------> Android为TextView组件中显示的文本添加背景色
通过上一篇文章 我的Android进阶之旅------> Android在TextView中显示图片方法 (地址:http://blog.csdn.net/ouyang_peng/article ...
- 我的Android进阶之旅------>关于调用Webservice查询火车票时刻表的几个接口介绍
今天发现一个可以提供火车票时刻表查询的WebService,先记录下来以后如果写一个火车票时刻表查询的Android App的话就用的着.首先该WebService的的名字是TrainTimeWebS ...
- 我的Android进阶之旅------>Android疯狂连连看游戏的实现之实现游戏逻辑(五)
在上一篇<我的Android进阶之旅------>Android疯狂连连看游戏的实现之加载界面图片和实现游戏Activity(四)>中提到的两个类: GameConf:负责管理游戏的 ...
随机推荐
- poj 3617 Best Cow Line (字符串反转贪心算法)
Best Cow Line Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9284 Accepted: 2826 Des ...
- 什么是ETag
ETag 是 Entity Tag 的缩写,中文译过来就是实体标签的意思.在HTTP1.1协议中其实就是请求HEAD中的一个属性而已. HTTP/1.1 200 OK Date: Mon, 23 Ma ...
- 关于dbutils中QueryRunner看批量删除语句batch
//批量删除 public void delBooks(String[] ids) throws SQLException { QueryRunner qr = new QueryRunner(C3P ...
- IBATIS中‘$’与‘#’使用
IBATIS中关于iterate和‘$’与‘#’的应用 一个包含List元素的HashMap参数赋给sqlMap public int getCountById(String id, String ...
- PHP——做服务
xml的写法和特点 <?xml version='1.0' encoding='utf-8'?><Info><code>c001</code><n ...
- 如何执行静默(无人参与)Java 安装?
http://www.java.com/zh_CN/download/help/silent_install.xml
- VC中怎么输入特殊符号(如平方、立方等下标符号)
同在列表控件里显示汉字一样,直接把输入法里特殊字符放进一个数组里,然后再赋值:CString F[]={"m²","∑","±"," ...
- openwrt U盘启动
参考链接: http://m.blog.csdn.net/blog/zcynical/44892785
- 第5步:建立主机间的信任关系(sgdb1、sgdb2)
5.1 Oracle用户下建立信任 5.11创建.ssh目录 [root@sgdb1 /]# su - oracle [oracle@sgdb1 ~]$ mkdir .ssh 创建一个.s ...
- WPF验证之——必填验证
要事先必填验证,首先要重写ValidationRule类的Validate方法,然后在Binding中指定对应的ValidationRule. 第一步:重写ValidationRule的Validat ...