Android开发中bug记录

String.format转换小数点数据时".“被转换为”,":

场景 当设置语言为某些国家(如法国、西班牙、葡萄牙)时,使用String str = String.format("%0.2f",12.345)转换时".“会被转换为”,"
处理方式 String str = String.format(Locale.US, “%0.2f” , 12.345)即可(其实为语言文化差异导致,并非bug当时还不知道没怼测试亏了~~~)。
原因分析 String.format时会默认会通过Locale.getDefault()来转换字符,代码如下:

java/util/Formatter.java
private StringBuilder localizedMagnitude(StringBuilder sb, char[] value, Flags f, int width, Locale l){
	...
	char decSep = '\0';//小数点对应的字符

    int len = value.length;
    int dot = len;
	for (int j = 0; j < len; j++) {
      if (value[j] == '.') {
           dot = j;
           break;
       }
   	}

   	if (dot < len) {
       if (l == null || l.equals(Locale.US)) {
           decSep  = '.';
       } else {
           DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(l);
           decSep  = dfs.getDecimalSeparator();
       }
   	}
	...
}

下面贴出维基百科中的各国小数点实例:

以下是不同国家的数字写法实例,包括小数点和数位分号(用中文数字表示为“一百二十三万四千五百六十七点八九”):
部分澳门、法国、芬兰、匈牙利、西班牙、葡萄牙、意大利和加拿大法语地区:1 234 567,89
德国、荷兰、比利时、丹麦、意大利、罗马尼亚和欧洲大多地区:1 234 567,89或1.234.567,89(手写也可能会写成1·234·567,89)
瑞士德语地区:1’234’567,89
中华人民共和国、部分澳门、澳大利亚、加拿大英语地区、大韩民国、朝鲜民主主义人民共和国、马来西亚、新加坡、英国和美国:1,234,567.89或旧写法1,234,567·89
国际单位制:1 234 567.89(句点地区)or 1 234 567,89(逗号地区)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值