-1

我不确定如何使用数字格式类来将双重格式转换为美国货币。

例如,如果学费是 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");

    }
}
4

2 回答 2

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退还学费,而不是仅仅将其存储在一个字段中,但那是另一回事。

于 2013-09-20T21:07:32.290 回答
0

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

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

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

0.05 英镑

1.57 英镑

300.00 英镑

34,124.20 英镑

123,456,789.99 英镑

显然,如果您需要支持不同的语言环境,那么这还不够(而且,这“仅”适用于高达 2^53 的货币价值......)

于 2015-11-24T12:22:07.377 回答