2

私はJavaで通貨を扱う大学の課題をやっています。そのため、doubleの代わりにintを使用し、後でステートメントを出力するときにドル値に変換することをお勧めします。

数値4005で計算を行うまではすべて正常に機能します(intとして表される$ 40.05のように)。問題のあるコードの一部を貼り付けています。誰かが私が間違っていることを教えてくれれば幸いです。

import java.io.*;
class modumess {
    public static void main(String[] args) {
        int money = 4005; //Amount in cents, so $40.05;

        // Represent as normal currency
        System.out.printf("$%d.%d", money/100, money%100);
    }
}

上記のコードを実行すると、$40.05ではなく$40.5が表示されます。何が得られますか?

これは私の宿題のためであり、学びたいので、単純な解決策ではなく、ここで問題の根本について説明していただければ幸いです。

編集:Finbarrの答えに続いて、問題を修正したと思われるコードに以下を追加しました:

if (money%100 < 10) {
            format = "$%d.0%d";
        }

これはそれを行うための良い方法ですか、それとも私はここで物事を複雑にしすぎていますか?

編集:私を助けたのはフィンバーとウェスの両方の答えであったことを明確にしたいのですが、進め方が明確になったのでウェスの答えを受け入れました。

4

2 に答える 2

6

より良い方法は、一般的なケースでは次のようなものです。

format = "%d.%02d";

%02d2桁のパディングは0になります。そうすれば、余分なifステートメントは必要ありません。

フォーマットで実行できることの詳細については、次を参照してください:http: //docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html#syntax

于 2012-01-17T01:54:48.710 に答える
2

剰余演算子は、分数計算なしで除算後の余りを返します。この場合、4005/100の余りは5であるため、4005%100は5を返します。

于 2012-01-17T01:43:59.500 に答える