引子

以下国家或地区以句点<.>来表示基点:
澳洲、汶莱、博茨瓦纳、加拿大英语地区、香港、澳门(民间及中文的官方文件使用)、中国、印度、爱尔兰、以色列、日本、韩国、朝鲜、马来西亚、墨西哥、新西兰、尼日利亚、巴基斯坦、菲律宾、新加坡、斯里兰卡、泰国、英国、美国
以下国家或地区以逗号<,>来表示基点:
阿尔巴尼亚、安道尔、阿根廷、奥地利、阿塞拜疆、白俄罗斯、比利时、玻利维亚、波斯尼亚和黑塞哥维那、巴西、保加利亚、喀麦隆、加拿大法语地区、哥斯达黎加、克罗地亚、古马、智利、哥伦比亚、塞浦路斯、捷克、丹麦、多米尼加共和国、厄瓜多尔、萨尔瓦多、爱沙尼亚、法罗、芬兰、法国、德国、希腊、格陵兰、危地马拉、洪都拉斯、匈牙利、印度尼西亚、冰岛、意大利、拉脱维亚、立陶宛、马其顿共和国、摩尔多瓦、荷兰、澳门(葡语官方文件及土生葡人使用)挪威、尼加拉瓜、巴拿马、巴拉圭、秘鲁、波兰、葡萄牙、罗马尼亚、俄国、塞尔维亚、斯洛伐克、南非、斯洛文尼亚、西班牙、瑞典、瑞士、土耳其、乌克兰、乌拉圭、委内瑞拉、越南、津巴布韦

以上文字摘自维基百科,这表示不同的国家采用的小数点表示方法也不尽相同。

问题

根据公司市场部同事说,一位希腊客户(刚开始我并不知道这位是希腊人)在使用公司的Android国际版应用时,App发生崩溃。
我根据市场部同事的描述,也进行了一样的操作,可是没有出现什么问题。后来市场部同事发来了一段小视频,就是客户的操作视频,视频中确实发生了应用重启。我注意到视频中手机的语言不是英语,于是我就询问了市场部,得知客户是希腊人,手机语言是希腊语。接着我用希腊语的手机测试了一下,问题发生了。在集成环境中可以看到崩溃日志是数字强转异常:“1,0”不能被转为Float类型。
找到相关代码处,发现以下代码:

DecimalFormat var2 = new DecimalFormat("###.0");

代码中用var2格式化了1.0,得到的却是“1,0”,这让我很纳闷:明明是小数点,怎么就变成逗号了?我突然想起有些国家的小数点和逗号的用法和我国的是截然不同的,这就是引子中提到的。

解决

问题的原因找到了,接下来就可以修改了,尝试运行以下代码就知道如何修复此bug了:

DecimalFormat var1 = (DecimalFormat) DecimalFormat.getInstance(Locale.FRANCE);
var1.applyPattern("###.0");
System.out.println(var1.format(1.0));
var1 = (DecimalFormat) DecimalFormat.getInstance(Locale.ENGLISH);
var1.applyPattern("###.0");
System.out.println(var1.format(1.0));
DecimalFormat var2 = new DecimalFormat("###.0");
System.out.print(var2.format(1.0));

而代码中的最后两行则是默认使用了本机的默认语言。所以只要把程序中的

DecimalFormat var2 = new DecimalFormat("###.0");

改为

DecimalFormat var2 = (DecimalFormat) DecimalFormat.getInstance(Locale.FRANCE);
var2.applyPattern("###.0");

即可。

总结

总有一些莫名其妙的规矩影响着我们这些开发人员。

不同国家的小数点给开发者带来的困扰相关推荐

  1. 重磅,Flutter 1.9 正式发布!谷歌还为开发者带来了这些东西...

    点击上方"开发者技术前线",选择"星标" 21:30 在看 真爱                 作者 | 唐小引 写于上海世博中心 出品 |  CSDN(ID ...

  2. 微软发布Windows重要更新 为开发者带来更多机缘

    2014年4月3日,北京--微软公司于本今晨在美国旧金山举办的Build 2014微软开发者大会上,宣告了若干Windows渠道的重要更新,包含发布Windows Phone 8.1.Windows ...

  3. 起、承、转、合全赋能:华为应用生态为开发者带来了什么?

    2021年12月14日,HUAWEI Developer Day(简称HDD)在深圳举办.沙龙从多个维度展示了华为在HMS生态面向开发者赋能的方案与成果.截至2021年10月22日,HUAWEI DE ...

  4. 看展览胡月:Testin云测给多数安卓开发者带来实实在在帮助

    看展览胡月:Testin云测给多数安卓开发者带来实实在在帮助 2014/09/18 · Testin · 开发者访谈 Testin云测的服务能给多数安卓开发团队带去实实在在的巨大帮助.做的是务实性而非 ...

  5. php 没有libmysql.dll,PHP5.3以上版本没有libmysql.dll,以及由此带来的困扰

    有朋友下载了PHP5.3,PHP5.4版本想加载mysql支持的时候发现没有libmysql.dll文件,无法完成mysql配置,其实PHP5.3版本开始,使用mysqlnd库,不再使用libmysq ...

  6. PHP5.3以上版本没有libmysql.dll,以及由此带来的困扰

    有朋友下载了PHP5.3,PHP5.4版本想加载mysql支持的时候发现没有libmysql.dll文件,无法完成mysql配置,其实PHP5.3版本开始,使用mysqlnd库,不再使用libmysq ...

  7. c mysql dll_PHP5.3以上版本没有libmysql.dll,以及由此带来的困扰

    有朋友下载了PHP5.3,PHP5.4版本想加载mysql支持的时候发现没有libmysql.dll文件,无法完成mysql配置,其实PHP5.3版本开始,使用mysqlnd库,不再使用libmysq ...

  8. 解决Chrome、360自动填充用户名和密码行为带来的困扰

    解决Chrome.360自动填充用户名和密码行为带来的困扰 对于今天被浏览器自动填充账户密码行为恶心到吐,我必须记录下我的心情. 常见的几种解决方案: 先列举下查到的的几种方法 1.input标签加a ...

  9. 乐视html5,乐视杨永强:Letv Store为HTML5开发者带来新机遇

    [赛迪网讯]8月12日消息,近日,在2013HTML5峰会上,乐视网(300104,股吧)以精装展位出席HTML5,并在现场摆放了三台超级电视X60,供开发者体验. 智能电视目前处于快速增长期.据Di ...

最新文章

  1. lisp天正图元位置修改_块内图元的坐标定位[已解决]感谢版主
  2. 试题以文件的形式存在C语言,2016年计算机二级C语言上机题库
  3. CSS设置按钮式超链接
  4. Mysql索引的创建和使用
  5. 第一、第二、第三范式之间的理解和比较(转载)
  6. 微信小程序获取unionid为空
  7. centos6.8安装oracle12C 详细步骤讲解
  8. 如何把本地yum源给其他机器使用_配置本地yum源以及第3方软件仓库的搭建
  9. MongoDB的导入与导出
  10. iOS-使用添加的花样字体
  11. 郑大计算机组成与维护在线测试,郑大远程教育《计算机组成原理》第08章在线测试...
  12. mysql 查询默认编码_查看及修改MYSQL默认编码
  13. 【code】flex_进度条样式
  14. 计算机一些常见名词解释
  15. spring自动注入bean
  16. SSH学习之四 OpenSSH安全
  17. 51单片机开发工具安装
  18. dejavu中如何添加html文件,【dejavu Chrome插件图文介绍】dejavu Chrome插件图片教程 - 开发者插件 - Chrome插件网...
  19. [BJOI2019] 排兵布阵
  20. bc vc投资_【融资系列】 VC投资中的常见分期追加投资

热门文章

  1. 团体程序设计天梯赛 L2-010 排座位
  2. oracle 共享磁盘阵列,共享磁盘阵列双机热备实战配置教程配置手册.docx
  3. 在国内如何提高英语口语
  4. 软件学院宣传视频制作日志——后期制作阶段
  5. Windows快速定位已经占用端口的程序 - TCPView
  6. H5中安卓返回键拦截
  7. 网络欺凌即将成为严重社会问题
  8. 8CB8CCD14EB87A3614FF883829721920
  9. CQF笔记M2L3VaR和ES
  10. 安装GOOGLE-AUTHENTICATOR验证器