在使用Java的方法中转换为货币
我正在开发一个应用程序,它需要将long和double格式化为currency。我得到了正确的输出,数字显示在我的控制台中,但不是美元格式。 我试过使用数字格式,但它不起作用,也许我把它放错地方了。这是我的密码:在使用Java的方法中转换为货币,java,Java,我正在开发一个应用程序,它需要将long和double格式化为currency。我得到了正确的输出,数字显示在我的控制台中,但不是美元格式。 我试过使用数字格式,但它不起作用,也许我把它放错地方了。这是我的密码: import java.text.DateFormat; import java.util.Date; import java.text.NumberFormat; private Date arrivalDate; private Date departureDate;
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;
}
这告诉我如何将货币转换为字符串。当我这样做,并尝试为calculateTotalPrice方法返回currency时,java告诉我:将方法返回类型更改为String,或将currency类型更改为double,这两种方法都会添加更多错误-永无止境的循环
我想做的就是将我的nightlyRate和TotalPrice更改为货币格式。谢谢你的帮助
根据请求,我将显示准确的错误消息:
当我在calculateTotalPrice()中运行这些代码行时:
错误:
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)
当我将货币变量转换为字符串时
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
format()
-方法返回一个字符串,因此您的第一种方法已经相当不错了:
String currency = NumberFormat.getCurrencyInstance().format(TotalPrice);
但是,现在您的方法calculateTotalPrice()
想要返回一个double
,因此您需要将方法的返回类型也更改为String
,或者将字符串转换回double
(我怀疑您是否真的想要)。
请注意,在货币事务中使用double
是不好的。您应该改用BigDecimal
。您使用不正确。试试这个
import java.text.*;
public class Currency {
private double TotalPrice;
// only one instance required
NumberFormat nformat = NumberFormat.getCurrencyInstance();
public static void main(String[] args) {
new Currency().start();
}
public void start() {
final double nightlyRate = 100.00;
int elapse = 1020202220; // random value
double elapsedDays = elapse / (24 * 60 * 60 * 1000.);
TotalPrice = elapsedDays * nightlyRate;
String formattedCurrency = formatCurrency(TotalPrice);
System.out.println(formattedCurrency);
}
public String formatCurrency(double amount) {
String fmtedCurrency = nformat.format(amount);
return fmtedCurrency;
}
}
根据您所在的位置,您可能需要也可能不需要设置区域设置。你应该用美分来处理你的货币单位。以后再兑换成美元。
这可能对你有用 首先,你应该。浮点数将有舍入错误。这就是为什么你应该使用
然后,要将字符串解析为BigDecimal,您应该在DecimalFormat类中使用,然后将为您返回一个BigDecimal。编辑问题以显示精确的错误消息(复制和粘贴)。变量“currency”当前从未被读取。这不是您的全部类代码,对吗?你能把全班同学都安排在这里吗?例如:到达日期;私人日期离开日期;不是initialized@Michael我在中添加了错误。您需要做的是获取设置区域设置的货币符号,您可以在显示hi、@moxim时将其附加到货币值。在这种情况下,我如何实现BigDecimal?谢谢你好,WJS,我导入了您的代码,还导入了java.util.Locale。在我的代码中,我尝试这样做:返回nformat;但是当我试图返回它时,在nformat下面有红色下划线。IDE建议是1。将方法返回类型更改为数字格式或2。将nformat的类型更改为double。您希望返回格式化数字的字符串,而不是格式本身,不是吗?因此,返回类型必须是string,而不是double。在我的示例中,您希望返回输出;字符串输出=格式(总价);返回输出;它仍然会返回这样的总价:345.0或115.0等。我不需要它,因为我正在编辑我的示例,所以你可以看到它的全部内容。很抱歉,但是有了三年编程的背景,你应该能够发现如何处理WJS示例:formattedCurrency=formattcurrency(nightlyRate);System.out.println(格式化货币)代码>老实说,我不认为在某些家庭作业类型的代码中使用BigDecimal有什么意义,这里的数学要求显然可以用long和double来处理,而不会出现任何舍入错误。看看代码,关于酒店的夜数应该乘以夜费率,这很难算得上高收益。除了一些链接之外,你并不能真正回答OP的问题。如果你在家庭作业中做错了事情,你可能会在工作中做同样的事情。而且用正确的方法做也不难……请看我的最新评论。这与金融无关,它是一些基础数学,重点是正确格式化数字。听说过“适合这份工作的合适工具”吗?我绝对同意莱昂纳多的观点。BigDecimal是完成这项工作的合适工具。请参阅WLS卓越链接。@moxim将100.0乘以一个最有可能是一位数或两位数的整数,您认为需要BigDecimal吗?不要把它变成它不是的东西。
import java.text.*;
public class Currency {
private double TotalPrice;
// only one instance required
NumberFormat nformat = NumberFormat.getCurrencyInstance();
public static void main(String[] args) {
new Currency().start();
}
public void start() {
final double nightlyRate = 100.00;
int elapse = 1020202220; // random value
double elapsedDays = elapse / (24 * 60 * 60 * 1000.);
TotalPrice = elapsedDays * nightlyRate;
String formattedCurrency = formatCurrency(TotalPrice);
System.out.println(formattedCurrency);
}
public String formatCurrency(double amount) {
String fmtedCurrency = nformat.format(amount);
return fmtedCurrency;
}
}