在 toString 方法中格式化小数?

问题描述 投票:0回答:3

我正在开发一个项目,该项目实现运费等基本成本,我需要能够格式化 toString 以便它显示具有两位小数的成本。我已经对舍入进行了一些研究并实现了 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。我该如何格式化它以便所有小数都显示为两个值?我还想知道我是否应该使用 BigDecimal,因为班级中尚未介绍这一点。 是否有其他易于实现的舍入方法也可以格式化双精度值的显示?或者我应该在 toString 方法中格式化小数?

java rounding
3个回答
2
投票

您可以在

DecimalFormat
申请
toString
。关于
BigDecimal
的适当性,如果您正在处理金钱,并且需要精度,请使用 BigDecimal。

@Override
public String toString() {

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

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

如果您从

BigDecimal
方法返回
double
而不是
round
,则浮动精度不会丢失。


0
投票

使用

DecimalFormat
double
打印为带有两位小数的
String

@Override
public String toString() {
    DecimalFormat df = new DecimalFormat("#.00");
    return "From: " + sender + "\n" + "To: " + recipient + "\n"
            + carrier + ": " + weightInOunces + "oz" + ", "
            + df.format(baseCost());
}

0
投票

您还可以在

String.format
方法中使用
toString
来格式化一个双精度值,类似于您在
System.out.format
方法中所做的操作。

@Override
public String toString() {
    return "From: " + sender + "\n" + "To: " + recipient + "\n"
            + carrier + ": " + weightInOunces + "oz" + ", "
            + String.format("%.2f", baseCost());
}
© www.soinside.com 2019 - 2024. All rights reserved.