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 などに設定します。

以下の関数では、この情報を次のような文字列で返します。

ジョー F. パイン、$7384.282、17.28%、567 ポイント

この関数の使用:

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

ただし、実際にはこれを返しています。

ジョー F. パイン、$7384.282、17.299999999999997%、567 ポイント

私はこれを試しましたが、役に立ちませんでした

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

小数点以下 2 桁だけを返すようにしたいので、これはやや面倒です。これは %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、およびそれらのボックス化された対応物) が 10 進数表現のバイナリ近似であるため、これを考慮しないとあらゆる種類の問題が発生する可能性があるという事実にあります。

非常に大きな値を扱う場合にも注意が必要(a== (a+1))==trueです。

また、通貨やその他の重要なデータについては、バイナリ近似ではなく、正確な文字列表現を格納するBigDecimalをお勧めします。それは地球上で処理するのが最も簡単なことではありませんが、データの重要性を考えると、それは避けられないと思います.

于 2012-10-15T08:17:59.367 に答える