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

Kyl*_*ans 0 java floating-point formatting return decimal

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

RewardsCreditAccount testAccount = new RewardsCreditAccount("Joe F. Pyne", 7384.282343837483298347, 0.173, 567);
Run Code Online (Sandbox Code Playgroud)

所以这个对象将设置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");
}
Run Code Online (Sandbox Code Playgroud)

但是,它实际上是返回此:

Joe F. Pyne,$ 7384.282,17.299999999999997%,567分

我试过这个,但无济于事

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

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

Fil*_*dor 5

你必须使用String.format();那种格式 - 字符串.

所以这

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

应该:

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

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

  • @Fildor s/1.5.0/7 /;) (2认同)

Sub*_*der 5

使用 DecimalFormater 格式化您的值。

new DecimalFormat("###.##").format(17.299999999999997);
Run Code Online (Sandbox Code Playgroud)

以供参考