作为一个更大的程序的一部分,我有这个函数,当被调用时,返回返回的字符串。 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完成,但我不知道如何格式化语法。我非常感谢任何有关正确显示十进制值的帮助。谢谢!
答案 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)
答案 2 :(得分:3)
您需要使用String.format()
格式化返回的字符串: -
String.format("%5.2f",balance)
答案 3 :(得分:1)
浮点数并不总是很容易处理。
你的问题在于浮点类型(如float和double,以及它们的盒装对应物)只是它们的十进制表示的二进制近似值,所以当不将它计算在内时会出现各种类型的问题。
在处理非常大的值时,您还必须注意,因为它可能发生(a== (a+1))==true
...
此外,对于货币和其他此类关键数据,我建议 BigDecimal ,它存储精确的字符串表示形式,而不是二进制近似值。尽管如此,这并不是地球上最微不足道的细节,但考虑到数据的重要性,我认为这是不可避免的。