2015-09-30 35 views
0

進出口使用的NumberFormat bracketted文字負數

double value = -1.0; 
    NumberFormat defaultFormat = NumberFormat.getCurrencyInstance(Locale.US); 
    String formattedText = defaultFormat.format(value); 

在活動顯示負數但是,當我在Samsung Galaxy S5 (Android 4.4.2)運行此我得到($1.0)凡爲Nexus 5 (Android 5.1.1)賦予它作爲-$1.0

這裏有什麼問題?

回答

0

由於@Bonati

public static String formatAmount(double value) { 
     NumberFormat numberFormat = new DecimalFormat("'$'0.00"); 
     return numberFormat.format(value); 
    } 

這對我工作得很好。

+0

如果答案對您有幫助,請點擊下方的綠色V標記爲「已回答」,這將結束該問題。如果您需要更多幫助或不同的幫助,請發佈一個新問題或編輯您的問題以詢問您的需求。祝你好運。 – Bonatti

1

From the documentation:

警惕的默認語言環境

注意這裏是自動使用默認的語言環境許多方便的方法,但是使用它們可能會導致微妙的錯誤。

默認語言環境適用於涉及向用戶呈現數據的任務。在這種情況下,您想要使用用戶的日期/時間格式,數字格式,轉換爲小寫字母的規則等等。在這種情況下,使用便利方法是安全的。

缺省語言環境不適用於機器可讀輸出。最好的選擇通常是Locale.US - 這個區域保證可以在所有設備上使用,並且它沒有令人意外的特殊情況並經常使用(特別是對於計算機 - 計算機通信)意味着它往往是最有效的選擇。

一個常見的錯誤是在生成意味着機器可讀的輸出時隱式使用缺省語言環境。這往往適用於開發人員的測試設備(特別是因爲許多開發人員使用en_US),但在用戶處於更復雜的區域設置的設備上運行時會失敗。

例如,如果格式化整數,某些語言環境將使用非ASCII十進制數字。作爲另一個例子,如果你正在格式化浮點數,一些locale將使用','作爲小數點,'。'用於數字分組。這對於人類可讀的輸出是正確的,但是如果呈現給另一臺計算機可能會導致問題(例如,parseDouble(String)無法解析這樣的數字)。你也應該警惕toLowerCase()和toUpperCase()重載,它們不採用Locale:例如,在土耳其,字符'i'和'I'不會被轉換爲'I'和'i 」。這是土耳其文本的正確行爲(如用戶輸入),但不適用於HTTP標頭。

+0

是的,你是對的。 現在我使用自己的格式化程序 NumberFormat defaultFormat = new DecimalFormat(「'''0.00」);返回defaultFormat.format(value); –