使用java中的numberformat类输出货币

时间:2013-09-20 21:02:59

标签: java

我不确定如何使用数字格式类以使双重格式成为美国货币。

例如,如果学费是1000,我需要它打印$ 1,000.00。我会放一段代码来显示我的麻烦。

public double getCurrencyInstance()是我开始使用的方法,显然不正确。

import java.text.NumberFormat;

public class OnlineStudent extends Student {

    private double computingFee;

    public double getCurrencyInstance(){                
        return computingFee;                
    }

    public OnlineStudent(){                
        super();               
    }

    public OnlineStudent(String fName, String lName, String id,  int credits, double rate, double compFee){
        super(fName, lName, id, credits, rate);
        this.computingFee = compFee;
    }

    public void computeTuition(){
        tuition = (rate + computingFee) * creditNum;
    }

    public String toString(){
        return ("\nOnline Student:\nFirst name:\t\t" + firstName + "\nLast name:\t\t" + lastName + "\nStudent ID:\t\t" + studentID 
                + "\nCredits:\t\t" + creditNum + "\nRate:\t\t\t" + super.rate + "\nTuition:\t\t" + super.tuition + "\nComputing Fee:\t\t"
                + getCurrencyInstance() + "\n\n");

    }
}

2 个答案:

答案 0 :(得分:1)

您需要使用NumberFormat.getCurrencyInstance(...),然后使用 来格式化您的值。例如:

public String toString() {
    NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(Locale.US);
    return "\nOnline Student:\nFirst name:\t\t" + firstName 
         + "\nLast name:\t\t" + lastName + "\nStudent ID:\t\t" + studentID 
         + "\nCredits:\t\t" + creditNum 
         + "\nRate:\t\t\t" + currencyFormat.format(super.rate)
         + "\nTuition:\t\t" + currencyFormat.format(super.tuition) 
         + "\nComputing Fee:\t\t" + currencyFormat.format(computingFee) + "\n\n");
}

我强烈建议您使用BigDecimal作为货币值,而不是double。我还会重新考虑computeTuition 返还学费,而不仅仅是将其存放在某个领域,但这是另一回事。

答案 1 :(得分:0)

用于快速简便地打印标准货币金额,例如英国语言环境,我使用:

String.format("£%,.02f", pennies / 100.0);

这可能是最短的代码,并为输出提供了货币值格式化的最常见方式,例如:

  

£0.05

     

£1.57

     

£300.00

     

£34,124.20

     

£123,456,789.99

显然,如果你需要支持不同的语言环境,那么这还不够(同样,对于最多2 ^ 53的货币值,这只是'好'...)