我正在盡最大努力找到一種方法來使用Java在各種不屬於該貨幣的語言環境中設置外幣的格式。我發現了java.util.Currency,它可以表示適用於各種語言環境的正確符號。也就是說,對美元而言,它在美國爲我提供了$,在其他國家提供了美元或美元。另外,我找到了java.text.NumberFormat,它將爲特定區域設置貨幣格式。我的問題 - util.Currency將提供適當的符號和代碼來表示非默認區域中的貨幣,但不會以任何特定於區域的方式格式化貨幣。 NumberFormat假定我通過它的數字是語言環境,該語言環境的貨幣爲,不是外幣。例如,如果我使用getCurrencyInstance(Locale.GERMANY),然後格式化爲(1000),則假定我格式化爲1000歐元。實際上,我可能需要以美元或日元或任何其他貨幣的正確的德國本地化表示形式(正確的小數和千位分隔符,是將符號放在金額前後)。迄今爲止我能夠推導出的最好的方法是使用NumberFormat格式化數字,然後搜索非數字字符的輸出,並將其替換爲從util.Currency派生的符號。然而,這是非常脆弱的,可能不足以達到我的目的。想法?任何幫助深表感謝。在Java中的國外語言環境中格式化貨幣
回答
嘗試通過getCurrencyInstance(Locale.GERMANY)返回的實例
破碎使用setCurrency:
java.text.NumberFormat format = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.GERMANY);
System.out.println(format.format(23));
輸出:23,00€
固定:
java.util.Currency usd = java.util.Currency.getInstance("USD");
java.text.NumberFormat format = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.GERMANY);
format.setCurrency(usd);
System.out.println(format.format(23));
輸出:23,00 USD
我想補充的les2 https://stackoverflow.com/a/7828512/1536382,我相信的小數數不從貨幣拍攝,必須手動設置爲應答,否則,如果客戶端(的NumberFormat)擁有日本區域和貨幣是歐元或en_US,那麼金額顯示爲'la'Yen',沒有小數位數,但這不像預期的那樣,因爲歐元小數點是相關的,對日本也是如此;-)。
因此,可以通過添加format.setMaximumFractionDigits(usd.getDefaultFractionDigits());
來改進示例2,在該示例的特定情況下該示例不相關,但它使用帶有小數的數字和Locale.JAPAN作爲NumberFormat的語言環境變得相關。
java.util.Currency usd = java.util.Currency.getInstance("USD");
java.text.NumberFormat format = java.text.NumberFormat.getCurrencyInstance(
java.util.Locale.JAPAN);
format.setCurrency(usd);
System.out.println(format.format(23.23));
format.setMaximumFractionDigits(usd.getDefaultFractionDigits());
System.out.println(format.format(23.23));
將輸出:
USD23
USD23.23
在NumberFormat code類似的東西是爲格式的初始/默認貨幣完成的,調用方法DecimalFormat#adjustForCurrencyDefaultFractionDigits。當貨幣與NumberFormat.setCurrency
好的。這真的很乏味,要求成爲一個公用事業圖書館,例如公用貨幣。有一個存在嗎? CurrencyUtils.getFormatter(Locale,Currency).format(BigDecimal) – les2
對於任何可能被此行爲叮咬的人,請留下以下內容:在Android上(特別是帶有4.3的Samsung Galaxy Note 2),使用locale de_CH(Deutsch(Schweiz)),if我得到默認的貨幣格式化程序,並調用setCurrency(「CAD」),我會得到「瑞典語」四捨五入。也就是說,26.98的值被格式化爲27.00!但通過setCurrency(「USD」),我沒有看到這種行爲。如上所述調用setMaximumFractionDigits()似乎可以解決問題,但對我來說沒有意義,因爲默認情況下,CAD和USD都使用2個小數位。 – gnuf
這隻能解決顯示最大小數位數的問題。其他所有內容(如舍入行爲和貨幣符號位置)都會保留指定區域設置的本地貨幣設置。 – mpontes
import java.util.*;
import java.text.*;
public class Solution {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double payment = scanner.nextDouble();
scanner.close();
NumberFormat lp; //Local Payment
lp = NumberFormat.getCurrencyInstance(Locale.US);
System.out.println("US: " + lp.format(payment));
lp = NumberFormat.getCurrencyInstance(new Locale("en", "in"));
System.out.println("India: " + lp.format(payment));
lp = NumberFormat.getCurrencyInstance(Locale.CHINA);
System.out.println("China: " + lp.format(payment));
lp = NumberFormat.getCurrencyInstance(Locale.FRANCE);
System.out.println("France: " + lp.format(payment));
}
}
這是一些國家貨幣格式化程序的完整代碼。 – Ankush
Scanner scanner = new Scanner(System.in);
double payment = scanner.nextDouble();
scanner.close();
java.text.NumberFormat formatUS = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.US);
String us=formatUS.format(payment);
java.text.NumberFormat formatIn = java.text.NumberFormat.getCurrencyInstance(new java.util.Locale("en","in"));
String india=formatIn.format(payment);
java.text.NumberFormat formatChina = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.CHINA);
String china=formatChina.format(payment);
java.text.NumberFormat formatFrance = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.FRANCE);
String france=formatFrance.format(payment);
System.out.println("US: " + us);
System.out.println("India: " + india);
System.out.println("China: " + china);
System.out.println("France: " + france);
- 1. iOS中不同語言環境的貨幣格式化程序
- 2. 貨幣格式化語言?
- 3. 貨幣,語言環境
- 4. 格式化java中各種語言環境的給定貨幣? (舍入問題)
- 5. 格式的價格在當前的語言環境和貨幣
- 6. 在Google App Engine中使用語言環境進行貨幣格式化蟒蛇
- 7. 獲取語言環境的貨幣
- 8. 在Java中格式化貨幣
- 9. 在iPhone中生成所有貨幣的語言環境
- 10. 未格式化貨幣格式貨幣
- 11. SKProduct語言環境中的貨幣符號不正確
- 12. PyCountry貨幣格式化困境'DE'alpha2國家代碼
- 13. 格式國際貨幣
- 14. Django的語言環境格式化
- 15. 國際化的語言環境
- 16. 格式化貨幣
- 17. 格式化貨幣
- 18. 格式化貨幣
- 19. Java:改變語言環境格式
- 20. Java的貨幣格式化:強制使用的貨幣符號
- 21. Python語言環境在字符串末尾設置貨幣
- 22. 在Symfony2的URL中使用語言環境(語言+國家)
- 23. 如何在RainMeter中格式化貨幣?
- 24. 如何在PostgreSQL中格式化貨幣
- 25. 如何在VB.NET中格式化貨幣
- 26. Android改變中國和中國傳統中國語言環境
- 27. 美元貨幣格式在Java中
- 28. 將貨幣格式化爲asp.net mvc c中的貨幣#
- 29. angularjs根據所選翻譯語言指示貨幣格式化
- 30. Java:語言環境是否影響格式化程序的JFormattedTextField
'1)'是您在GUI某處顯示此數據, '2)'我從來沒有嘗試過(ISO CCY代碼之後改變不這樣做此操作rellevant)那麼我的問題是你嘗試過美元,澳元,新元也許有符號$, '3)''我建議尋找ISO代碼,而不是混合和設置不同的區域設置,例如因爲out_dated http:/ /萬維網。oanda.com/help/currency-iso-code-country但首先來自谷歌, – mKorbel
與此相關的原因是,您不應該將資金存儲在原始的「他們自己的」中:他們應該是一個類的一部分,還包含他們代表的貨幣(500美元不是500日元)。 –
您是否看到我在下面給出的答案?這能解決問題嗎? – les2