在使用Java的方法中转换为货币

在使用Java的方法中转换为货币,java,Java,我正在开发一个应用程序,它需要将long和double格式化为currency。我得到了正确的输出,数字显示在我的控制台中,但不是美元格式。 我试过使用数字格式,但它不起作用,也许我把它放错地方了。这是我的密码: import java.text.DateFormat; import java.util.Date; import java.text.NumberFormat; private Date arrivalDate; private Date departureDate;

我正在开发一个应用程序,它需要将long和double格式化为currency。我得到了正确的输出,数字显示在我的控制台中,但不是美元格式。 我试过使用数字格式,但它不起作用,也许我把它放错地方了。这是我的密码:

  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;
   }

}