
当用户更改设备的语言环境时,编号也会根据所选的语言环境而更改.这在执行数学运算时导致NumberFormatException,并且应用程序崩溃了.导致崩溃的代码段如下所示.
public static double ToDataUnitMB(double _dataBytes){double dDataBytes;dDataBytes = Double.parseDouble(getDecimalFormat().format(_dataBytes / 1048576));return dDataBytes; }此代码段导致NumberFormatException,并且_dataBytes中的值显示为“ ७२.४१”.有人可以帮助我防止用户更改语言环境时更改数字.
更新资料
执行以下 *** 作后,我得到值“ ७२.७२”.getDecimalFormat().format(_dataBytes / 1048576)
因此,在解析为Double时,它显示numberFormatException
解决方法:
由于您是从原始_dataBytes开始的,因此您有几种选择,可以独立于语言环境格式化数字.
第一种方法:
您可以根据需要修改以下代码段.无论用户的语言环境如何,它都将提供相同的输出.
String patern = "###.##"; //your pattern as per need Locale locale = new Locale("en", "US"); DecimalFormat decimalFormat = (DecimalFormat) NumberFormat.getNumberInstance(locale); decimalFormat.applyPattern(patern); double formatedDouble = Double.parseDouble(decimalFormat.format(_dataBytes/(1024*1024f)));请记住,此方法还使分组分隔符和小数点分隔符固定,因此逗号和点将始终分别用作分组分隔符和小数点分隔符.
第二种方法:
如果您不严格要求Double,则可以使用以下方法生成格式化的String:
String generateFormatedfileSize(long _dataBytes) { String formatedfileSize = ""; long bytes = _dataBytes; short unit = 1024; if (bytes < unit) formatedfileSize = bytes + " B"; else { int exp = (int) (Math.log(bytes) / Math.log(unit)); formatedfileSize = String.format("%.1f %sB", bytes / Math.pow(unit, exp), "KMGT".charat(exp - 1)); } return formatedfileSize; }此格式对分组分隔符和小数点分隔符敏感,但对语言环境不敏感.
对于使用“ US”编号格式的本地,这将为您提供以下输出:
12.5 KB
5.3 B
8.0 MB
对于使用“欧洲”编号格式的本地:
12,5 KB
5,3 B
8,0 MB
当然,这两种方法不是唯一的,您可以在App的不同部分混合使用这些方法.
总结以上是内存溢出为你收集整理的防止数字根据android中的语言环境更改全部内容,希望文章能够帮你解决防止数字根据android中的语言环境更改所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)