Java NumberFormatException:无效的double:"٢&引用;

Java NumberFormatException:无效的double:"٢&引用;,java,android,double,Java,Android,Double,简单除法后,我尝试将结果四舍五入到小数点后2位。一切正常,但在一些设备上,我得到了这个符号“٢”作为除法的结果。当我尝试将该符号四舍五入到小数点后2位时,该符号会导致数字格式异常。 有人能向我解释为什么会发生这种情况,以及我如何解决它吗 我的代码: double total = 0; double average = 0; for (HashMap.Entry<String, Double> entry : ratings.entrySet()) {

简单除法后,我尝试将结果四舍五入到小数点后2位。一切正常,但在一些设备上,我得到了这个符号“٢”作为除法的结果。当我尝试将该符号四舍五入到小数点后2位时,该符号会导致数字格式异常。 有人能向我解释为什么会发生这种情况,以及我如何解决它吗

我的代码:

    double total = 0;
    double average = 0;
    for (HashMap.Entry<String, Double> entry : ratings.entrySet()) {
        String person = entry.getKey();
        Double rating = entry.getValue();
        total += rating;
    }
    average = total / ratings.size();

    ratingsDisplay.setTitleText(roundTo2Decimals(average) + "");

public double roundTo2Decimals(double val) {
    DecimalFormat df2 = new DecimalFormat("###.##");
    return Double.valueOf(df2.format(val)); <== this is where the crash happens
}

您得到的字符在Unicode中称为
阿拉伯-印度数字2

以下是其他数字:

٠ 0
١ 1
٢ 2
٣ 3
٤ 4
٥ 5
٦ 6
٧ 7
٨ 8
٩ 9
解决此问题的一种方法是通过
replace
替换数字以将其转换为英语。但是,这在某些情况下可能不起作用。另外,你应该知道世界上还有其他的数字系统

因此,您应该将十进制格式的区域设置改为
en_US
。这样,就不会出现奇怪的角色

DecimalFormat formatter = (DecimalFormat) DecimalFormat.getNumberInstance(Locale.US);
formatter.applyPattern("###.##");
String fString = formatter.format(100);
System.out.println(fString);

您得到的字符在Unicode中称为
阿拉伯-印度数字2

以下是其他数字:

٠ 0
١ 1
٢ 2
٣ 3
٤ 4
٥ 5
٦ 6
٧ 7
٨ 8
٩ 9
解决此问题的一种方法是通过
replace
替换数字以将其转换为英语。但是,这在某些情况下可能不起作用。另外,你应该知道世界上还有其他的数字系统

因此,您应该将十进制格式的区域设置改为
en_US
。这样,就不会出现奇怪的角色

DecimalFormat formatter = (DecimalFormat) DecimalFormat.getNumberInstance(Locale.US);
formatter.applyPattern("###.##");
String fString = formatter.format(100);
System.out.println(fString);
//基于清扫器回答:)


//根据清扫者的回答:)

符号“٢”是阿拉伯数字。i、 e等于2,在进行任何操作之前,将其转换为正常值state@shahid17june谢谢你的指点;但是,我如何知道他们处于错误的状态,以及如何将其转换为正确的状态。这将对您有所帮助,只需使用谷歌就可以了。像这样已经存在很多问题了“٢”符号是阿拉伯数字。i、 e等于2,在进行任何操作之前,将其转换为正常值state@shahid17june谢谢你的指点;但是,我如何知道他们处于错误的状态,以及如何将其转换为正确的状态。这将对您有所帮助,只需使用谷歌就可以了。像这样已经存在很多问题您好,欢迎使用SO!虽然这段代码可以回答这个问题,但提供关于它如何和/或为什么解决问题的附加上下文将提高答案的长期价值。请阅读,大家好,欢迎来到SO!虽然这段代码可以回答这个问题,但提供关于它如何和/或为什么解决问题的附加上下文将提高答案的长期价值。请阅读,然后
    String result = String.format(Locale.US,"%.2f", INT_VALUE);