我的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:负责管理游戏的 ...
随机推荐
- 查看selinux的状态
sh-4.1# getenforce Disabled sh-4.1# getenforce Disabled 永久方法 – 需要重启服务器 修改/etc/selinux/config文件中设置SEL ...
- SPI—读写串行 FLASH
SPI协议简介SPI 协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线.它被广泛地使用在 ADC. LCD ...
- c# 文件操作 txt、xml、ini
1. txt文件 /// <summary> /// 读文本文件信息 /// </summary> /// <param name="FilePath" ...
- HLJU 1042 Fight (种类并查集)
1042: Fight Time Limit: 1 Sec Memory Limit: 128 MB Submit: 26 Solved: 8 [Submit][Status][pid=1042& ...
- nginx中,$request_uri和$uri的区别
nginx中,$request_uri和$uri的区别 $request_uri This variable is equal to the *original* request URI as r ...
- centos7 mysql 5.7 官网下载tar安装
https://dev.mysql.com/downloads/mysql/5.7.html#downloads 下载好上传到服务器,解压后以此安装 libs,client,server三个rpm r ...
- 每隔10秒自动更新svn 定时更新svn 脚本
任务: */1 * * * * /opt/adobe/fms/webroot/api/svn.sh 这个命令的问题:只更新了版本号,没有更新实际内容,但是直接运行上面shell脚本能更新. 解决:需要 ...
- 使用jmeter实现对jar包的调用
一.前言 在我们测试接口的过程中,可能有时需要用到第三方jar包来生成一些测试数据(如有时需要对参数的输入值使用第三方jar包进行加密操作),涉及到这种的情况,普遍做法是:手动调用jar包获得需要的值 ...
- tree的使用
//html <ul id="tree"></ul> js function initTree() { $('#tree').tree({ url: '/ ...
- 【Raspberry Pi】crontab 定时任务
在linux上做定时任务一般用crond 两种方法上文已列,但昨天写的crond命令却一直都没有运行,上网查,有说是环境变量的,也有说是时间问题的,都改过,但还没有效. 今天再次认真读了一遍cront ...