[英]Java Converting long into currency
我無法將長(美分)轉換成貨幣格式。
我的代碼:
long doublePayment = 1099; //Should equal $10.99
DecimalFormat dFormat = new DecimalFormat();
String formattedString = dFormat.format(doublePayment);
System.out.println(formattedString);
產量:1,099
我也嘗試過:
long doublePayment = 1099;
NumberFormat n = NumberFormat.getCurrencyInstance(Locale.US);
String s = n.format(doublePayment);
System.out.println(s);
由於這是美分,輸出應為10.99或10.99美元。
無法弄清楚我做錯了什么。 謝謝!!!
如果你很開始,你仍然應該使用java.math.BigDecimal。
long doublePayment = 1099;
BigDecimal payment = new BigDecimal(doublePayment).movePointLeft(2);
System.out.println("$" + payment); // produces: $10.99
讓它再次大聲說出:永遠不應該使用浮點變量來存儲貨幣/貨幣價值。
要將美分兌換成美元,您可以使用
long doublePayment = 1099;
NumberFormat n = NumberFormat.getCurrencyInstance(Locale.US);
String s = n.format(doublePayment / 100.0);
System.out.println(s);
這將准確高達70萬億美元。
你的文字是1099
,這是一千九百九十九 ,應對整數文字的Java規則。 根據您的JVM語言環境,此數字以1,099
表示。 如果你在歐洲,那就是1.099
。 所以,這不是輸出的問題,而是你的輸入 。
問題是你必須代表一個固定的點值,但你不知道java.math.BigDecimal
並嘗試偽造它。 當你做一些計算時,事情就會破裂。 不要這樣做。
這就是你應該做的。 簡單(它的代碼也少得多):
BigDecimal payment = new BigDecimal("10.99");
System.out.println(String.format("$%.2f", payment));
請注意如何使用String初始化數字 。 此外, String.format()
將處理當前的語言環境 ,或者您可以通過重載方法提供所需的語言環境 。
這些答案都沒有考慮到不同語言環境中的貨幣具有不同的小數位數。 例如,日元的零數字為零,而約旦第納爾有三個,當然,美元有兩個。 我相信這是一個更合適的解決方案:
long payment = 1099L;
BigDecimal bd = new BigDecimal(payment);
Locale jpLocale = new Locale("ja", "JP");//Japan
Currency jpCurrency = Currency.getInstance(jpLocale);
NumberFormat jpnf = NumberFormat.getCurrencyInstance(jpLocale);
int jpNumFractionalDigits = jpCurrency.getDefaultFractionDigits();
BigDecimal jpbd = bd.movePointLeft(jpNumFractionalDigits);
Locale usLocale = new Locale("en", "US");//United States
Currency usCurrency = Currency.getInstance(usLocale);
NumberFormat usnf = NumberFormat.getCurrencyInstance(usLocale);
int usNumFractionalDigits = usCurrency.getDefaultFractionDigits();
BigDecimal usbd = bd.movePointLeft(usNumFractionalDigits);
System.out.println(jpnf.format(jpbd)); //prints ¥1,099
System.out.println(usnf.format(usbd));//prints $10.99
double doublePayment = 10.99;
你需要提供這樣的貨幣。 除非看到小數點,否則NumberFormat
將無法理解您是以美分還是以美元提供
格式化不是問題,輸入問題。 將您的輸入除以100,您將全部設定。
float payment = 1099 / ((float) 100);
使用貨幣格式化程序:
NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.ENGLISH);
String output = nf.format(value);
System.out.println(value + " " + output);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.