0

これは重複している可能性がありますが、私のコードで機能する答えが見つかりません。

Java でメソッド (料金を計算するため) の結果を切り捨てようとしています。次に、結果をテキスト ファイルに書き込もうとしましたが、本来のように表示されません。これは私が得るものであり、私がそれを返したいものです:

  1. 料金の結果は 8.4 です。8.40 を返す必要があります。
  2. 料金の結果は 8.0 です。8.00 を返す必要があります。

などなど...何か提案はありますか?

これは、メソッドのコード全体です。

public Double calculateFee(Parcel pcl) {    
    // Get type of parcel (E, S or X)
    String typeOfParcel = pcl.getParcelID().substring(0,1);
    // Formula for calculating fee
    Double fee = (double) 1 + Math.floor(pcl.getVolume()/28000) + (pcl.getDays()-1);

    // apply a discount to parcels of type "S"
    if (typeOfParcel.equalsIgnoreCase("S")) {
        fee = fee * 0.9;
    }

    // apply a discount to parcels of type "X"
    else if (typeOfParcel.equalsIgnoreCase("X")) {
        fee = fee * 0.8; 
    } 

    // This is what I tried:
    // Tried also using #.##, but no result
    DecimalFormat decim = new DecimalFormat("0.00");
    fee = Double.parseDouble(decim.format(fee));

    return fee;     
} 
4

2 に答える 2

2

1 つの方法は、String.format() を使用することです。

  Double fee = 8.0;
  String formattedDouble = String.format("%.2f", fee );

Double は、その値のフォーマットされた表現を保持しないことに注意してください。

フォーマット文字列の詳細については、こちらを参照してください。

于 2013-02-14T22:02:41.723 に答える
1

ここでの問題は、フォーマットが間違っているということではありません。次を使用して double をフォーマットしています。

decim.format(fee);

次に、この文字列を解析して Double に戻すため、書式設定が失われます。

Double.parseDouble(...

Double ではなく String を返すだけで、Double.parseDouble は使用しないでください。

于 2013-02-14T22:09:55.647 に答える