Android中DecimalFormat不同语言环境的坑

在项目开发中遇到涉及金额的地方免不了对数值进行格式化,例如:人民币 ¥####,####.##,美元$ ###,###,###.00 等。但是往往服务器返回的值都是int类型,如果直接展示在UI层上,就没有对应的格式了。

这里可以用到一个类:DecimalFormat

简单的使用方法是:

//format可以使用double,long作为参数
new DecimalFormat("###,##0.00").format(Double.parseDouble(String.valueOf(value)));

通过这段代码 输出的格式为带规范的String类型

例如 如果value的值是1000,那么通过上述代码得到的返回值为 “1,000.00” 。

这就是DecimalFormat的方便之处。

然而在开发中却遇到了这样的问题,产品要在多国家上线,开发过程中一切顺利。

但是到了测试中发现,如果将语言改成其他国家,例如西班牙,葡萄牙等。转换的格式就变了,逗号和句号便相互替换:

这才恍然大悟,原来DecimalFormat 的返回值是会根据语言区域化变化而变化的。

现在的问题就是要如何修改,不啰嗦,上代码:


DecimalFormat df = new DecimalFormat("###,##0.00");
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.US);
df.setDecimalFormatSymbols(symbols);
df.format(Double.parseDouble(String.valueOf(value)));

可以看到这段代码中增加了一个 “DecimalFormatSymbols”类,而这个类可以通过设置Locale来固定死转化的区域格式,如此便可以不管在何种语言环境都能将格式固定住。

结束!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值