我有以下代码行在我的应用程序,以使我的百分比到一个合理的长度;
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
发布于 2013-08-22 21:03:01
问题是,您使用DecimalFormat指定了自定义格式,然后使用默认Locale指定的格式解析结果String。
您有几种解决问题的方法:
DecimalFormat对象对数字进行格式化和解析。int存储在“百分之一”中。使用此int进行计算,并将其显示为十进制。BigDecimal来获得更高的精度。请注意,在任何进一步的计算中使用“四舍五入”的数字仍然很棘手,因为浮点数是不精确的。这意味着“四舍五入”的结果不一定准确。
发布于 2013-08-22 20:54:48
使用相同的数字格式解析数据
percentage = df.parse(df.format(percentage), new ParsePosition(0))其他解决方案是设置您自己的格式符号。
DecimalFormat df = new DecimalFormat('#.0', new DecimalFormatSymbols())我建议第一个解决办法。我在使用逗号作为小数分隔符的地区测试了它。
发布于 2013-08-22 20:51:51
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获得十进制分隔符。
https://stackoverflow.com/questions/18390328
复制相似问题