java国际化的难度在哪里_JAVA国际化问题

在应用中有这样一段代码:

public float caculatePercent(floatpercent) {

DecimalFormat df= new DecimalFormat("0.0");

String formatedStr=df.format(percent);

Float.valueOf(formatedStr);

}

先不考虑这段代码是否合理,反正应用中出现了。。然后应用在使用过程都是正常的,然而,突然有一天,qa说,崩溃了!

为什么之前都好好的,现在会崩溃?

qa反馈,在“印尼”语言环境下进行测试会崩溃,然而中文环境下正常。

手机设置中,切换语言环境到印尼(Bahasa Indonesia),这里千万要记住语言设置所在的位置,不然切换到印尼语之后,语言再也切不回来,不要怪我。

启动应用,执行到相应地方,果然崩溃了。抓取崩溃日志,捕获NumberFormatException,“100,0”不能被转成float!

看到这里,有点懵,为什么会有一个逗号!?

现在问题很明确,是由于这个逗号导致valueOf调用时奔溃,而在中文环境下是正常的,所以问题定位在df.format的时候,为什么会把float中的小数点变成逗号而不是我们平时用的句点。

总的来说就是,我们平时理解的“1,001.99”,在某些国家,他们是这么显示的“1.001,99”!!!。即他们是用逗号表示小数点。。

问题已明确,那么现在是要确保小数点是句点,不能是逗号。

此处可以考虑使用java.text.DecimalFormatSymbols。

DecimalFormatSymbols otherSymbols =DecimalFormatSymbols.getInstance();//指定分割点为句点

otherSymbols.setDecimalSeparator('.');

df.setDecimalFormatSymbols(otherSymbols);

这篇文章还讲到了SimpleDateFormat在多语言时候的一个坑,鸣谢作者zhouysh。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值