0

作为一个更大程序的一部分,我有这个函数,当被调用时,它会返回返回的字符串。accountHolder、balance、interestRate 和 points 是 RewardsCreditAccount 类型的对象中的变量。因此,例如,我在这里声明一个对象:

RewardsCreditAccount testAccount = new RewardsCreditAccount("Joe F. Pyne", 7384.282343837483298347, 0.173, 567);

所以这个对象会设置 accountHolder = "Joe F. Pyne", balance = 7384.282343837483298347,等等。

在下面的函数中,我以如下所示的字符串返回此信息:

Joe F. Pyne,7384.282 美元,17.28%,567 分

使用此功能:

    public String toString() {
    return (accountHolder + ", $" +  + balance + 100*interestRate + "%, " + points + " points");
}

然而,它实际上是在返回这个:

Joe F. Pyne,7384.282 美元,17.299999999999997%,567 分

我试过这个,但没有用

public String toString() {
    return (accountHolder + ", $" +  + ("%,1.2f",balance) + 100*interestRate + "%, " + points + " points");
}

这很烦人,因为我希望它只返回两位小数。我知道这可以使用 %1.2f 来完成,但我不知道如何格式化它的语法。对于正确显示十进制值的任何帮助,我将不胜感激。谢谢!

4

4 回答 4

5

您必须使用String.format();该格式字符串。

所以这

public String toString() {
    return (accountHolder + ", $" +  + ("%,1.2f",balance) + 100*interestRate + "%, " + points + " points");
}

应该:

public String toString() {
    return String.format("%s, $%,1.2f %s%%, %s points", accountHolder, balance, 100*interestRate, points );
}

使用格式化程序设置,以便根据您的需要打印。

于 2012-10-15T08:11:22.597 回答
4

使用 DecimalFormater 格式化您的值。

new DecimalFormat("###.##").format(17.299999999999997);

参考

于 2012-10-15T08:12:27.757 回答
3

您将需要用于String.format()格式化返回的字符串:-

String.format("%5.2f",balance)
于 2012-10-15T08:18:31.433 回答
1

浮点数并不总是容易处理的。

您的问题在于浮点类型(如 float 和 double,以及它们的盒装对应物)只是其十进制表示的二进制近似值,因此如果不考虑这一点,可能会出现各种此类问题。

处理非常大的值时还必须注意,因为可能会发生(a== (a+1))==true...

此外,对于货币和其他此类关键数据,我建议使用BigDecimal,它存储确切的字符串表示形式,而不是二进制近似值。虽然这不是地球上最微不足道的处理,但考虑到数据的重要性,我认为这是不可避免的。

于 2012-10-15T08:17:59.367 回答