我正在开发一个应用程序,该应用程序需要将长整型和双精度型格式化为货币。我得到正确的输出,并且数字显示在控制台中,但不是美元格式。 我尝试使用NumberFormat,但是它不起作用,也许我将其放置在错误的位置。这是我的代码:
import java.text.DateFormat;
import java.util.Date;
import java.text.NumberFormat;
private Date arrivalDate;
private Date departureDate;
private long elapsedDays;
private double TotalPrice;
public static final double nightlyRate = 100.00;
public double calculateTotalPrice()
{
long arrivalDateTime = arrivalDate.getTime();
long departureDateTime = departureDate.getTime();
long elapse = departureDateTime-arrivalDateTime;
elapsedDays = elapse/(24*60*60*1000);
TotalPrice = elapsedDays * nightlyRate;
NumberFormat currency = NumberFormat.getCurrencyInstance().format(TotalPrice);
return TotalPrice;
}
public double getTotalPrice()
{
this.calculateTotalPrice();
return TotalPrice;
}
这告诉我将货币转换为字符串。当我这样做时,尝试返回为convertTotalPrice方法使用的货币时,java告诉我:将方法的返回类型更改为String或将货币类型更改为double,这两种方法都会增加更多错误-永不结束循环。
我要做的就是将nightlyRate和TotalPrice更改为货币格式。任何帮助我们表示赞赏。
每个请求,我将显示确切的错误消息: 当我在calculateTotalPrice()中运行以下代码行时:
double currency = NumberFormat.getCurrencyInstance().format(TotalPrice);
return currency;
错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from String to double
at
calculate.reservation.totals.Reservation.calculateTotalPrice(Reservation.java:48)
at calculate.reservation.totals.Reservation.getTotalPrice(Reservation.java:54)
at calculate.reservation.totals.CalculateReservationTotals.main(CalculateReservationTotals.java:63)
当我将currency变量转换为String
String currency = NumberFormat.getCurrencyInstance().format(TotalPrice);
return currency;
我得到完全相同的错误说明:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from String to double
答案 0 :(得分:2)
您使用不正确。试试这个。
GCC_PREPROCESSOR_DEFINITIONS='AWS_UI_TEST'
根据您所在的位置,您可能需要或可能不需要设置区域设置。而且您应该使用美分来处理您的货币单位。以后转换为美元。 这可能对您有用。 Why not use Double or Float to represent currency?
答案 1 :(得分:1)
format()
方法返回一个String
,因此您的第一种方法已经相当不错了:
String currency = NumberFormat.getCurrencyInstance().format(TotalPrice);
但是,现在您的方法calculateTotalPrice()
要返回double
,因此您也需要将方法的返回类型也更改为String
,或将字符串转换回{ {1}}(我怀疑您真的想要)。
请注意,使用double
处理货币问题是不好的。您应该改用double
。
答案 2 :(得分:0)
首先,您应该carefully choose the type to use when dealing with finances。浮点数将具有舍入错误。这就是为什么您应该使用BigDecimal。
然后,要将字符串解析为BigDecimal as suggested here,应在DecimalFormat类中使用setParseBigDecimal,然后parse将为您返回BigDecimal。