zoukankan      html  css  js  c++  java
  • JAVA国际化问题

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

    public float caculatePercent(float percent) {
      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中的小数点变成逗号而不是我们平时用的句点。

    此处省略n多字,参见:http://zhidao.baidu.com/link?url=sVh0RUMAbKhwJjRg1Xwr9owx4PNOeQ4rLe4UiEOfDDQTdJUmAiW_q82WVdTHv1xbj7qmPcL8ZKp3HWwwSKfTTq

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

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

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

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

    或者可以考虑指定DecimalFromat的语言环境为具体某个国家,可以参看:http://blog.csdn.net/zhouysh/article/details/265938

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

  • 相关阅读:
    Centos7 ifconfig命令找不到
    request的各种方法
    linux开放端口
    easyui datagrid 部分参数
    设置tomcat内存
    tomcat做成系统服务
    Meta-analysis with complex research designs: dealing with dependence from multiple measures and multiple group comparisons
    多重校正
    DTI
    learning source archive
  • 原文地址:https://www.cnblogs.com/ivan-aldrich/p/5442780.html
Copyright © 2011-2022 走看看