【国际化】应用开发小数点和逗号

前情提要:不少国家表示小数的方式,并不是通用的小数点'.',而是用的逗号','.这个看起来人畜无害的设定,有时候会产生致命的bug。

故事:某国内游戏开发商在google play上上架了一款游戏app,主要发布的区域是东南亚,开始几天一切安好。突然某天,一玩家发布的游戏视频里出现了重大BUG,玩家的攻击翻了好几倍,攻击速度也加快了很多,原本困难重重的关卡,被他趟着过了,不明真相的策划们,哭晕在厕所。。而作为BUG制造专家的程序们,一副稳如狗的表情,内心其实已经慌的不行了,敲代码的手都在颤抖。连续排查了数日,毫无头绪,BOSS知道后,大为震怒,下达最后通牒,24小时内必须解决战斗(不是BUG),要不,全员狗带。。

本故事纯属虚构,如有雷同,实属巧合,当然部分情节还是有发生的。

中间排查(有没有排查未知。。)的事情就不表了,直接说结论吧。引起这个BUG的罪魁祸首,就是前情提到的逗号表示小数点引起的。因为部分国家(比如法国,德国,巴西,印尼等等)有这个特殊嗜好,导致这个区域的玩家,手机环境默认的是按此区域设定的。然后呢,游戏一般都有配置数据,比如一些战斗元素的设定,技能加成,功法什么的,配置时,用到了小数,然后读取到程序里之后,就直接被转成了本地区格式的小数,比如3.1415926就被转成了3,1415926这样了。有些语言逗号运算符还能进行运算,有些语言,或者接口,遇到这样的数据,应用程序可能就直接崩掉了,这样会导致各种非期望的运行结果。

解决办法:

找到了原因,处理起来就用迹可寻了:

1.既然是小数引起的,那么不用小数不就可以了么,这种就是简单粗暴,其实游戏运算,最好还是整数运算,小数运算,不同编程语言会有差异的,可能精确度有影响不一致,还有就是有点性能的问题,有些CPU,小数运算没有整数快。

2.说来说去还是程序在不同的环境下运行导致的,有些区域可以正常运行,比如中国,日本等,那么把运行环境设定为可以按照小数点运行的区域即可,比较通用的就是设定为英语国家,比如C#可以调用接口CultureInfo.CreateSpecificCulture(string)进行设定。如此设定虽然能解决这个问题,但也有不能本地化的隐患。

3.直接在使用的地方再强转,这个嘛,费时费力。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值