NumberFormatException:无效的双倍:“2”

NumberFormatException:无效的双倍:“2”

问题描述:

经过简单的划分后,我尝试将结果四舍五入到小数点后两位。一切工作正常,但在某些设备上,作为分割的结果,我得到了这个符号“2”。当我尝试将它舍入到小数点后两位时,此符号会导致数字格式异常。 有人能向我解释为什么发生这种情况,我怎么能解决这个问题NumberFormatException:无效的双倍:“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 
} 

错误日志:

0java.lang.NumberFormatException: Invalid double: "٢" 
1at java.lang.StringToReal.invalidReal(StringToReal.java:63) 
2at java.lang.StringToReal.initialParse(StringToReal.java:164) 
3at java.lang.StringToReal.parseDouble(StringToReal.java:282) 
4at java.lang.Double.parseDouble(Double.java:301) 
5at java.lang.Double.valueOf(Double.java:338) 
6at com.ducky.flipplanet.ToonViewer.roundTo2Decimals(ToonViewer.java:2750) 
7at com.ducky.flipplanet.ToonViewer.calculateAndShowRatings(ToonViewer.java:2919) 
8at com.ducky.flipplanet.ToonViewer.loadFromDocId(ToonViewer.java:2850) 
9at com.ducky.flipplanet.ToonViewer$79.onDataChange(ToonViewer.java:4816) 
10at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:53) 
11at com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45) 
12at com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38) 
13at android.os.Handler.handleCallback(Handler.java:739) 
14at android.os.Handler.dispatchMessage(Handler.java:95) 
15at android.os.Looper.loop(Looper.java:145) 
16at android.app.ActivityThread.main(ActivityThread.java:5938) 
17at java.lang.reflect.Method.invoke(Native Method) 
18at java.lang.reflect.Method.invoke(Method.java:372) 
19at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400) 
20at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195) 
+0

“2”符号的阿拉伯数字。即等于2,因此在进行任何操作之前将其转换为正常状态 – shahid17june

+0

@ shahid17june Thankyou作为指针;但是我如何知道他们处于错误的状态,以及如何将其转换为正确的状态。 –

+0

这将有助于你 https://stackoverflow.com/questions/22778734/arabic-digit-to-english-digit-android 只是做谷歌有很多问题已经存在这样的很多 – shahid17june

,你得到的字符被称为Unicode中的ARABIC-INDIC DIGIT TWO

这里是另一个数字:解决这个问题正在取代三位数replace把他们变成英语

٠ 0 
١ 1 
٢ 2 
٣ 3 
٤ 4 
٥ 5 
٦ 6 
٧ 7 
٨ 8 
٩ 9 

的一种方式。但是,这可能不适用于某些情况。另外,你应该知道世界上还有其他数字系统。

因此,您应该将十进制格式的语言环境设置为en_US。这样,没有怪异的角色会出来。

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

d = Double.parseDouble(new DecimalFormat("####.00").format(d).replace("٠", "0") 
        .replace("١", "1").replace("٢", "2").replace("٣", "3") 
        .replace("٤", "4").replace("٥", "5").replace("٦", "6") 
        .replace("٧", "7").replace("٨", "8").replace("٩", "9") 
        .replace("٫", ".")); 

//基于扫地答案:)