我的Android进阶之旅------>Java字符串格式化方法String.format()格式化float型时小数点变成逗号问题

简介:     今天接到一个波兰的客户说有个APP在英文状态下一切运行正常,但是当系统语言切换到波兰语言的时候,程序奔溃了。好吧,又是我来维护。    好吧,先把系统语言切换到波兰语,切换到波兰语的方法查看文章我的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

====================================================================================


相关文章
|
14天前
|
Java API 索引
Java基础—笔记—String篇
本文介绍了Java中的`String`类、包的管理和API文档的使用。包用于分类管理Java程序,同包下类无需导包,不同包需导入。使用API时,可按类名搜索、查看包、介绍、构造器和方法。方法命名能暗示其功能,注意参数和返回值。`String`创建有两种方式:双引号创建(常量池,共享)和构造器`new`(每次新建对象)。此外,列举了`String`的常用方法,如`length()`、`charAt()`、`equals()`、`substring()`等。
15 0
|
29天前
|
Java
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
25 0
|
14天前
|
Java
Java中ReentrantLock中tryLock()方法加锁分析
Java中ReentrantLock中tryLock()方法加锁分析
12 0
|
3天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
28 3
|
16小时前
|
Java
Java 与垃圾回收有关的方法
Java 与垃圾回收有关的方法
|
23小时前
|
存储 编解码 算法
Java 的 String StringBuilder StringBuffer(上)
Java 的 String StringBuilder StringBuffer
10 0
|
1天前
|
存储 Java 测试技术
一文搞清楚Java中的方法、常量、变量、参数
在JVM的运转中,承载的是数据,而数据的一种变现形式就是“量”,量分为:**常量与变量**,我们在数学和物理学中已经接触过变量的概念了,在Java中的变量就是在程序运行过程中可以改变其值的量。
3 0
|
5天前
|
存储 Java
Java动态转发代理IP的实现方法
Java动态转发代理IP的实现方法
21 11
|
6天前
|
Java
Java接口中可以定义哪些方法?
【4月更文挑战第13天】
13 0
Java接口中可以定义哪些方法?
|
12天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
13 0