首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DecimalFormat国家问题

DecimalFormat国家问题
EN

Stack Overflow用户
提问于 2013-08-22 20:34:09
回答 5查看 553关注 0票数 2

我有以下代码行在我的应用程序,以使我的百分比到一个合理的长度;

代码语言:javascript
复制
double percentage = ((double)correct*100)/((double)total);
DecimalFormat df = new DecimalFormat("#.0");
percentage = Double.valueOf(df.format(percentage));

这个代码在99%的情况下运行良好,但是当一些欧洲国家的人使用这个代码时,这是崩溃,给了我一个NumberFormatException

这是因为当DecimalFormat舍入双56.7777时,它会将其舍入到56,8(用逗号),这意味着当我试图将其转换为double时,会抛出一个NumberFormatException。

有没有办法将一个地区设置为DecimalFormat,这样我就知道它总是会转到56.8而不是56,8

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-08-22 21:03:01

问题是,您使用DecimalFormat指定了自定义格式,然后使用默认Locale指定的格式解析结果String

您有几种解决问题的方法:

  1. 使用相同的DecimalFormat对象对数字进行格式化和解析。
  2. 使用不同的舍入算法。例如: 双roundToHundredths(双d) {返回(int)(d * 100) / 100.0;}
  3. 将数字作为int存储在“百分之一”中。使用此int进行计算,并将其显示为十进制。
  4. 使用BigDecimal来获得更高的精度。

请注意,在任何进一步的计算中使用“四舍五入”的数字仍然很棘手,因为浮点数是不精确的。这意味着“四舍五入”的结果不一定准确。

票数 1
EN

Stack Overflow用户

发布于 2013-08-22 20:54:48

使用相同的数字格式解析数据

代码语言:javascript
复制
percentage = df.parse(df.format(percentage), new ParsePosition(0))

其他解决方案是设置您自己的格式符号。

代码语言:javascript
复制
DecimalFormat df = new DecimalFormat('#.0', new DecimalFormatSymbols())

我建议第一个解决办法。我在使用逗号作为小数分隔符的地区测试了它。

票数 2
EN

Stack Overflow用户

发布于 2013-08-22 20:51:51

代码语言:javascript
复制
    NumberFormat numberFormat = NumberFormat.getNumberInstance(context.getResources().getConfiguration().locale); // Locale.getDefaultLocale()
    DecimalFormat  decimalFormat = (DecimalFormat)numberFormat;
    char separator =decimalFormat.getDecimalFormatSymbols().getDecimalSeparator();
    decimalFormat.applyPattern("#".concat(Character.toString(separator)).concat("0"));"

您需要基于Locale获得十进制分隔符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18390328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档