0

私はメソッドをテストし、食べ物と価格を表示するコードを書きます:

import java.util.Scanner;
public class JavaTutorial5Class {

        public static void main(String[] args)
        {
            greeting("Thunderdome");
            prices("Fatburger", 7.50);
        }
        static void greeting(String restaurant)
        {
            System.out.println("Welcome to "  + restaurant);
        }

        static void prices(String burger, double price){
            System.out.print(burger + " is " + "$" + price);
            //System.out.println(Math.ceil(price % 10));
            if (Math.ceil(price % 10) == 8.0){
                System.out.print("0");
            }
        }
    }

なぜprice % 10 == 8.0ですか?そして、これは本当にそこにテーリング0を取得するためにあなたがしなければならないことですか?

編集:このコードが行うことになっているのは、「Fatburger is $ 7.50」を出力することだけです。問題は、引数7.50を指定するだけで7.5に変換されることです。

4

5 に答える 5

4

このコードでは、8.0を取得している理由は、を使用しているためですMath.ceil

7.5 % 10、、です。7.5_Math.ceil(7.5)8.0

ただし、これは非常に頻繁に発生するものであり、初心者にとって非常によくある間違いです...価格を2倍として保存することはほとんどありません。ダブル演算は、主にダブルが実際に格納される方法のために、必ずしも期待するほど正確であるとは限りません。たとえば、次のことを考慮してください。

double sum = 0.0;
int n = 6;
for (int i = 0; i < n; i++) {
    sum += 1.0 / n;
}
System.out.println(sum);

出力することを期待します1.0が、実際には出力します0.9999999999999999

価格を処理する正しい方法は、2つintのsを使用することです。1つはドル用、もう1つはセント用です。

于 2012-09-10T19:33:13.560 に答える
2

代わりにこれを試してください:

static void prices(String burger, double price){
    System.out.print(burger + " is $" + price);
    if ((int)(price * 10) == price * 10)
        System.out.print(0);
}

あなたが今それを持っているので、7.5 % 10単に戻っ7.5て、Math.ceilこれをに切り上げ8.0ます。

于 2012-09-10T19:32:01.293 に答える
2

価格%10は実際には7.5です。剰余は除算の余りです(または数値が別の数値に収まる回数)。たとえば、22%10は2です。これは、10が22を超えずに2回収まる可能性があるためです。上限を取得すると、最も近い整数に引き上げられ、7.5が8に引き上げられます。したがって、ifステートメントの結果はtrueになります。

于 2012-09-10T19:33:01.433 に答える
2

最終的に彼が望んでいる解決策(通貨の形でダブルを印刷すること)はそのように解決できると思います...

インポートを追加

import java.text.NumberFormat;  

このコードを使用します

NumberFormat nf = NumberFormat.getCurrencyInstance(); 
System.out.print(burger + " is " + "$" + nf.format(price));

すべてのモジュロのものを忘れてください(それはあなたが求めているものを達成するための複雑で間違った方法です)。

また、doubleにはわずかな丸めの問題があり、完全な精度が必要な場合(コードの残りの部分を考えると疑わしい)、通常、標準では2intを使用して通貨を格納します。

于 2012-09-10T19:35:27.003 に答える
2

次のコマンドを使用して、文字列を正しくフォーマットします。

System.out.printf(%s is $%.2f, burger, price)

文字列のフォーマットに関するチュートリアルについては、次のページを参照してください: http ://www.homeandlearn.co.uk/java/java_formatted_strings.html

は、文字列としてフォーマットされ %sたの値に置き換えられます。 は、小数点以下2桁の10進数としてフォーマットされたの値に置き換えられます。burger
%.2fprice

于 2012-09-10T19:35:47.023 に答える