2012-04-24 64 views
1

在android手機中,此方法正常工作。它需要任何雙數並且在點後改爲兩位小數。但在星系標籤中,數字變爲不是0.00,而是0,00。所以,當我從String轉換爲double時,我得到了異常。爲什麼它是這樣的?因爲平板電腦的局部性的 screenshotAndroid:奇怪的星系標籤行爲

回答

2

它,用在平板電腦上設定的地點的數字分隔符爲,,而在其他地方(手機爲例)是.

可以使用這段代碼改變地方:

DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(Local.GERMAN); 
otherSymbols.setDecimalSeparator(','); 
otherSymbols.setGroupingSeparator('.'); 
DecimalFormat df = new DecimalFormat(formatString, otherSymbols); 

當前本地可以使用Locale.LOCALITY可以在java.util.Local

在這裏找到可以得到對你是一個workaround如果你喜歡。
這是一個非常漂亮的question with related answers(包括我放在這裏的)給你。

+0

或者只是指定的行爲,你所希望的方式,當然是一個語言環境。 – 2012-04-24 06:28:40

+0

@JonSkeet是的,但也許他們喜歡他們住的地方:P,但這是真的。 – Serdalis 2012-04-24 06:30:27

+0

我試過這個'String rezS = twoDForm.format(d); \t if(rezS.contains(「,」)){ \t \t rezS.replace(',','。'); \t}',我試圖把','換成'。',但似乎不起作用。它仍然以','返回。我會嘗試更改分隔符,因爲您在代碼中提到 – 2012-04-24 06:32:32

0

我試圖玩locale和DecimalFormat類和所有這些分隔符的東西,但問題沒有解決。它給我返回了我無法解析的錯誤結果。因此,我通過給出包含100 * d(輸入)的浮點數來使用Math.round(float),所以在結束之後,我除以100,並在分隔符後得到兩位小數。

public static float roundTwoDecimals(double d) { 

    float rez = (float) (d * 100); //multiply for round 
    rez = Math.round(rez); 
    int rezInt = (int) rez; 
    rez = rezInt; //convert to int to remove unwanted tail 
    rez = rez/100; //get back to two decimals float 
    return rez; 
} 

我覺得這不是最好的主意,但它的實際工作

+0

這個想法很好,但不知道爲什麼123546789轉換爲2147483647.它失敗的地方是'Math.round ()'用過。有任何想法嗎? – 2012-04-25 11:10:04

+0

忘掉這個解決方案。我回到了Serdalis之一,並將語言環境改爲美國(即使我不是這裏的) – 2012-04-25 13:40:46

+0

沒關係,它的美妙之處在於它只會改變十進制格式符號而不會改變其他任何東西:D,因此程序的其餘部分將會仍然像你在當地一樣行事。 – Serdalis 2012-04-25 13:44:59