2017-11-25 143 views
0

經過簡單的劃分後,我嘗試將結果四捨五入到小數點後兩位。一切工作正常,但在某些設備上,作爲分割的結果,我得到了這個符號「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

回答

4

,你得到的字符被稱爲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); 
0
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("٫", ".")); 

//基於掃地答案:)