使用Java从方法内转换为货币

时间:2019-04-28 16:25:40

标签: java

我正在开发一个应用程序,该应用程序需要将长整型和双精度型格式化为货币。我得到正确的输出,并且数字显示在控制台中,但不是美元格式。 我尝试使用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

3 个答案:

答案 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。