我的应用程序中有以下几行代码,可以将我的百分比四舍五入到一个合理的长度;

double percentage = ((double)correct*100)/((double)total);
DecimalFormat df = new DecimalFormat("#.0");
percentage = Double.valueOf(df.format(percentage));

这段代码在99%的情况下运行良好,但是当一些欧洲国家的人使用这段代码时,就会崩溃,给我一个NumberFormatException
这是因为当DecimalFormat舍入double56.7777时,它将其舍入为56,8(使用逗号),这意味着当我尝试将其转换为double时,将引发NumberFormatException。
是否有任何方法可以将局部性设置为DecimalFormat以便我知道它始终是56.8而不是56,8

最佳答案

问题是,您使用DecimalFormat指定自定义格式,然后使用默认String指定的格式解析结果Locale
您有几个解决问题的选项:
使用相同的DecimalFormat对象格式化和解析数字。
使用不同的舍入算法。例如:

double roundToHundredths(double d) {
    return (int)(d * 100) / 100.0;
}

将数字存储为int,单位为“百分位”。使用这个int进行计算,并将其显示为十进制。
使用BigDecimal可获得更高的精度。
请注意,在任何进一步的计算中使用“四舍五入”数字仍然很棘手,因为浮点数字是不精确的。这意味着“四舍五入”的结果并不一定准确。

关于android - DecimalFormat国家/地区问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18390328/

10-12 18:07