您的位置:首页 > 移动开发 > Android开发

android 使用String.format("%.2f",67.876)自已定义语言(俄语、西班牙语)会把小数点变为逗号

2016-05-03 09:36 716 查看
市场人员反映公司的app使用系统设置俄语、西班牙语,double数据会把小数点变为逗号。调试一下,是自定义的语言时候(例如,俄语、西班牙语)转换String.format("%.2f",67.876)。会出现的。

1、android 系统,设置系统语言的步骤

Android【设置】-【语言和输入法】-【语言】列表中找到相应语言所对应的列表项

2、问题分析

java.util.Locale类

在这个Locale类里面,有些语言是没有,例如俄语、西班牙语等。那么这时候android开发时候需要这些语言,怎么办。只好后面自已新建,自定义。

?
Locale类里面,私有方法新建语言的。可是不提供外部调用。

?
源码中的这个方法是共外部新建语言的。
构造一个新的{ @code地区}使用指定的语言,国家,和变体编码。

?
这是我在外面新建俄语、西班牙语。因为调用不了上面是有方法。只有这个方法。
这个方法的新建是为了匹配资源文件的翻译的以及后面的系统的调用

?
?
If you're formatting a string other than for human * consumption, you should use the {@code format(Locale, String, Object...)} * overload and supply {@code Locale.US}. See * "Be wary of the default locale". * * @param format the format string (see {@link java.util.Formatter#format}) * @param args * the list of arguments passed to the formatter. If there are * more arguments than required by {@code format}, * additional arguments are ignored. * @return the formatted string. * @throws NullPointerException if {@code format == null} * @throws java.util.IllegalFormatException * if the format is invalid. * @since 1.5 */ public static String format(String format, Object... args) { return format(Locale.getDefault(), format, args); }

这上面是一般调用方法,String strResult = String.format("%0.2f",543.6356);
这句语句是double型543.6356保留小数点的两位,并转化成String类型。
调用这个方法时候,其实是默认调用format(Locale.getDefault(), format, args)。因为返回是调用了这个。多了一个参数就是Locale.getDefault()。这个参数使获取系统设置的语言。并作为后面的转换参数的。

?
那么现在问题就来了。但我使用自定义的语言时候(例如,俄语、西班牙语)。使用下面语句转换,小数点会变成逗号

?
结果360,672

如果我使用Locale类有定义,就不会出现这种情况。例如中文,英文肯定是正常的。

3、解决办法

分析到这里了,就说一下解决办法。
只好调用这个方法String.format(Locale.ENGLISH,"%.2f",dValue),多了一个参数。自已传进去转换的语言是什么。不再是默认系统语言设置的。因为对于数据,全世界都是通用,那么默认使用英语来转换都没有问题。数据都是这样转换的。

?
那么又产生一个问题,同时有转换字符串。这个得注意一下。

?
这个就要分开转换再接起来,不然都是英文,转换不了其他的语言的。

这个设计上缺陷是否是android sdk 或者jdk的存在bug。我使用都是jdk1.7和sdk 4.2版本。
欢迎大家发现与测试。

?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: