簡體   English   中英

Java長期轉換為貨幣

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM