在Java中返回一个只有两位小数的double作为更大字符串的一部分?

时间:2012-10-15 08:08:52

标签: java floating-point formatting return decimal

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

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

因此,此对象将设置accountHolder =“Joe F. Pyne”,余额= 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 个答案:

答案 0 :(得分: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 );
}

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

答案 1 :(得分:4)

使用DecimalFormater格式化您的值。

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

reference

答案 2 :(得分:3)

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

String.format("%5.2f",balance)

答案 3 :(得分:1)

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

你的问题在于浮点类型(如float和double,以及它们的盒装对应物)只是它们的十进制表示的二进制近似值,所以当不将它计算在内时会出现各种类型的问题。

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

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