0

私は、送料などの基本コストを実装するプロジェクトに取り組んでおり、toString をフォーマットして、小数点以下 2 桁でコストを表示できるようにする必要があります。私はすでに丸めについていくつかの調査を行い、BigDecimal 丸めメソッドを実装しました。

public static double round(double unrounded, int precision, int roundingMode) {
    BigDecimal bd = new BigDecimal(unrounded);
    BigDecimal rounded = bd.setScale(precision, roundingMode);
    return rounded.doubleValue();
}

private double baseCost() {

    double cost = (weightInOunces * costPerOunceInDollars);
    cost = round(cost, 2, BigDecimal.ROUND_HALF_UP);
    return cost;
}

@Override
public String toString() {
    return "From: " + sender + "\n" + "To: " + recipient + "\n"
            + carrier + ": " + weightInOunces + "oz" + ", "
            + baseCost();
}

ただし、$11.50 の値を出力すると、$11.5 になります。System.out.format() スタイルで小数をフォーマットする方法は知っていますが、それを toString に適用する方法がわかりません。すべての小数が 2 つの値に表示されるように、これをフォーマットするにはどうすればよいですか? クラスにまだ導入されていないので、BigDecimal を使用する必要があるかどうかも疑問に思っています。double 値の表示も書式設定する丸めメソッドを実装するのが簡単な他の方法はありますか? または、 toString メソッド内で小数点をフォーマットする必要がありますか?

4

2 に答える 2

1

DecimalFormatでお申し込みいただけますtoString。の妥当性についてはBigDecimal、精度が要求されるお金を扱う場合は、BigDecimal を使用してください。

@Override
public String toString() {

   DecimalFormat format = new DecimalFormat("#.00");

   return "From: " + sender + ... + format.format(baseCost());
}

メソッドからBigDecimalではなく返された場合、浮動精度は失われません。doubleround

于 2013-02-03T23:27:00.253 に答える
0

を小数点以下 2 桁のとして出力するために使用DecimalFormatします。doubleString

@Override
public String toString() {
    DecimalFormat df = new DecimalFormat("#.00");
    return "From: " + sender + "\n" + "To: " + recipient + "\n"
            + carrier + ": " + weightInOunces + "oz" + ", "
            + df.format(baseCost());
}
于 2013-02-03T23:26:51.873 に答える