我的应用程序中有以下几行代码,可以将我的百分比四舍五入到一个合理的长度;
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/