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